Metodo para agregar campos en la definicion de Articulos en Joomla 1.5 , enlazado a la base de datos y que luego seran mostrado en el front.
Luego de buscar en media internet sobre como agregar un bendito campo en la edicion de Articulos en Joomla 1.5 (obviamente que luego pueda ser visualizado al acceder al articulo) no encontre NAda de nada, ni en los foros de joomlaspanish, parece que esta muy nueva esta version y los programadores siguen trabajando con las versiones 1.1x
Luego de pasar un total de mm…( 1+1 = 3 .. +5 +8 = 20 +…) unas 22 hras finalmente lo he logrado;
Digamos que queremos agregar un campo llamado Antetitulo y en la vista de articulos se muestre en la parte superior (antes del titulo) del Articulo.
1. debemos editar el archivo
administrator\components\com_content\admin.content.html.php
esta es la pantalla que se muestra cuando le damos en editar o agregar un nuevo Articulo.
ahi por la linea 700 y algo
en la funcion
PHP:
-
</p>
-
<p>function _displayArticleDetails(&$row, &$lists )</p>
-
<p>
-
</p>
-
<p>function _displayArticleDetails(&$row, &$lists )</p>
-
<p>
esta una table donde se listan los campos del formulario
title, subtitle, category ……
entonces simplemente ponemos nuestro textbox o lo que sea:
PHP:
-
<br />
-
<?php echo $row->antetitulo ?><br />
-
<label for=»antetitulo»><br />
-
Antetitulo<br />
-
</label></p>
-
<p> <input class=»inputbox» type=»text» name=»antetitulo» id=»antetitulo» size=»40″ maxlength=»255″ value=»antetitulo; ?>» /></p>
-
<p>
-
<br />
-
<?php echo $row->antetitulo ?><br />
-
<label for=»antetitulo»><br />
-
Antetitulo<br />
-
</label></p>
-
<p> <input class=»inputbox» type=»text» name=»antetitulo» id=»antetitulo» size=»40″ maxlength=»255″ value=»antetitulo; ?>» /></p>
-
<p>
2. Ahora vamos a nuestro gestor de la base de Datos MySQL y agregamos un nuevo campo en la tabla jos_content
(la consulta SQL seria algo asi)
-
</p>
-
<p>
-
ALTER TABLE `jos_content` ADD `tipo` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `title` ;
-
</p>
-
<p>
-
</p>
-
<p>
-
ALTER TABLE `jos_content` ADD `tipo` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `title` ;
-
</p>
-
<p>
3. Editamos el archivo
administrator\components\com_content\controller.php
ahi por la linea 500 algo
donde esta el code
PHP:
-
</p>
-
<p> // Create the form<br />
-
$form = new JParameter(», JPATH_COMPONENT.DS.’models’.DS.’article.xml’);</p>
-
<p> // Details Group<br />
-
-
$form->set(‘created_by’, $active);<br />
-
$form->set(‘access’, $row->access);<br />
-
$form->set(‘created_by_alias’, $row->created_by_alias);
-
</p>
-
<p>
-
</p>
-
<p> // Create the form<br />
-
$form = new JParameter(», JPATH_COMPONENT.DS.’models’.DS.’article.xml’);</p>
-
<p> // Details Group<br />
-
$form->set(‘created_by’, $active);<br />
-
$form->set(‘access’, $row->access);<br />
-
$form->set(‘created_by_alias’, $row->created_by_alias);
-
</p>
-
<p>
le agregamos
-
</p>
-
<p>$form->set(‘antetitulo’, $row->antetitulo);</p>
-
<p>
-
</p>
-
<p>$form->set(‘antetitulo’, $row->antetitulo);</p>
-
<p>
y en la linea
550 algo
donde esta la funcion
function saveContent()
agregamos
-
</p>
-
<p>
-
$row->antetitulo = JRequest::getVar( ‘antetitulo’);
-
</p>
-
<p>
-
</p>
-
<p>
-
$row->antetitulo = JRequest::getVar( ‘antetitulo’);
-
</p>
-
<p>
mismo archivo,
controller.php
por la linea 1300 algo
por donde esta
PHP:
-
</p>
-
<p>
-
// values loaded into array set for store<br />
-
$row->id = NULL;<br />
-
$row->sectionid = $newsect;<br />
-
$row->catid = $newcat;<br />
-
$row->hits = ‘0’;<br />
-
$row->ordering = ‘0’;<br />
-
$row->title = $item->title;<br />
-
…..
-
</p>
-
<p>
-
</p>
-
<p>
-
// values loaded into array set for store<br />
-
$row->id = NULL;<br />
-
$row->sectionid = $newsect;<br />
-
$row->catid = $newcat;<br />
-
$row->hits = ‘0’;<br />
-
$row->ordering = ‘0’;<br />
-
$row->title = $item->title;<br />
-
…..
-
</p>
-
<p>
Agregamos
PHP:
-
</p>
-
<p> $row->antetitulo = $item->antetitulo;</p>
-
<p>
-
</p>
-
<p> $row->antetitulo = $item->antetitulo;</p>
-
<p>
AH, se me olvidaba, linea 400 algo
-
</p>
-
<p>jimport(‘joomla.utilities.date’);<br />
-
$createdate = new JDate();<br />
-
$row->sectionid = $sectionid;<br />
-
$row->version = 0;<br />
-
$row->state = 1;<br />
-
$row->ordering = 0;<br />
-
$row->images = array ();<br />
-
$row->publish_up = $createdate->toUnix();<br />
-
$row->publish_down = JText::_(‘Never’);<br />
-
$row->creator = »;<br />
-
$row->created = $createdate->toUnix();<br />
-
$row->modified = $nullDate;<br />
-
$row->modifier = »;<br />
-
$row->frontpage = 0;
-
</p>
-
<p>
agregamos
PHP:
-
</p>
-
<p> $row->antetitulo = »;</p>
-
<p>
4. Ya casi , pero todavia no
ya guarda en la base de datos , pero aun no carga,
entonces debemos modificar una clase del sistema
\libraries\joomla\database\table\content.php
por la linea 80
PHP:
-
</p>
-
<p> var $attribs = null;<br />
-
/** @var int */
-
var $version = null;<br />
-
/** @var int */
-
var $parentid = null;<br />
-
/** @var int */
-
var $ordering = null;<br />
-
/** @var string */
-
var $metakey = null;<br />
-
/** @var string */
-
var $metadesc = null;<br />
-
/** @var string */
-
var $metadata = null;<br />
-
/** @var int */
-
var $access = null;
-
</p>
-
<p>
agregamos
var $antetitulo = null;
listo la parte del back-end
5. Ahora solo nos queda agregarlo en la parte del front
ahi queda a tu gusto, en mi caso hice un template en el que defino como se ve el componente com_content
para la parte de articles
y le agrego
article->antetitulo; ?>
-
</p>
-
<p>jimport(‘joomla.utilities.date’);<br />
-
$createdate = new JDate();<br />
-
$row->sectionid = $sectionid;<br />
-
$row->version = 0;<br />
-
$row->state = 1;<br />
-
$row->ordering = 0;<br />
-
$row->images = array ();<br />
-
$row->publish_up = $createdate->toUnix();<br />
-
$row->publish_down = JText::_(‘Never’);<br />
-
$row->creator = »;<br />
-
$row->created = $createdate->toUnix();<br />
-
$row->modified = $nullDate;<br />
-
$row->modifier = »;<br />
-
$row->frontpage = 0;
-
</p>
-
<p>
agregamos
PHP:
-
</p>
-
<p> $row->antetitulo = »;</p>
-
<p>
-
</p>
-
<p> $row->antetitulo = »;</p>
-
<p>
4. Ya casi , pero todavia no
ya guarda en la base de datos , pero aun no carga,
entonces debemos modificar una clase del sistema
\libraries\joomla\database\table\content.php
por la linea 80
PHP:
-
</p>
-
<p> var $attribs = null;<br />
-
/** @var int */
-
var $version = null;<br />
-
/** @var int */
-
var $parentid = null;<br />
-
/** @var int */
-
var $ordering = null;<br />
-
/** @var string */
-
var $metakey = null;<br />
-
/** @var string */
-
var $metadesc = null;<br />
-
/** @var string */
-
var $metadata = null;<br />
-
/** @var int */
-
var $access = null;
-
</p>
-
<p>
-
</p>
-
<p> var $attribs = null;<br />
-
/** @var int */
-
var $version = null;<br />
-
/** @var int */
-
var $parentid = null;<br />
-
/** @var int */
-
var $ordering = null;<br />
-
/** @var string */
-
var $metakey = null;<br />
-
/** @var string */
-
var $metadesc = null;<br />
-
/** @var string */
-
var $metadata = null;<br />
-
/** @var int */
-
var $access = null;
-
</p>
-
<p>
agregamos
var $antetitulo = null;
listo la parte del back-end
5. Ahora solo nos queda agregarlo en la parte del front
ahi queda a tu gusto, en mi caso hice un template en el que defino como se ve el componente com_content
para la parte de articles
y le agrego