it-swarm-es.tech

¿Cómo modificar la estructura del artículo?

A veces, necesitamos personalizar la estructura de Joomla! Artículos con campos personalizados para proponer a los usuarios diferentes áreas de texto/entrada donde puede ingresar datos como fecha, ubicación, texto 1, texto 2, etc.

Entonces, es más fácil lidiar con el diseño en la parte frontal. Con las reglas CSS, cada contenido está diseñado correctamente.

Sé que puedo hacer eso con el componente CCK como K2, Seblod, etc.

¿Hay alguna otra forma sin componente, con php y agregando algunas modificaciones a Joomla?

4
Sébastien Gicquel

Creo que tengo tu solución, pero NO hackear el núcleo. Nosotros nos sentimos obligados a hacerlo a lo largo de los años, y todavía estamos pagando el precio incluso hoy, faltan actualizaciones, revisamos hacks cada vez que hacemos actualizaciones, y Incompatibilidad general con otros componentes.

Lo que hacemos ahora es esto:

  1. Nueva mesa #__content_ext con un campo clave que es idéntico a #__content y una columna para cada campo personalizado que desee.
  2. Nueva mesa #__categories_ext con un campo clave que es idéntico a #__categories y una columna para cada campo personalizado que desee.
  3. Agregue campos personalizados a com_content (usamos y amamos Aixeena CCK que puede agregar campos personalizados al contenido, categorías, y menús) .

En este punto, estás aprovechando todo el código/lógica en com_content sin un solo hack core. Sin embargo, todos sus campos personalizados se almacenan en las columnas params y attribs de las tablas de Joomla, lo que no es ideal para el uso típico de la base de datos en otro código personalizado que pueda necesitar. Aquí es donde entra la "magia":

Escriba un complemento de contenido simple utilizando el siguiente código de muestra para crear/actualizar las extensiones de tabla descritas anteriormente. Esto pone todos sus campos personalizados en tablas personalizadas que están disponibles para cualquier propósito para el que los necesite en SQL.

public function onContentAfterSave($context=null, $article=null, $isNew=0) {
    if($context == 'com_categories.category') {
        $params = new JRegistry;
        $params->loadString($article->params);
        $myObj = $params->toObject();
        // Use properties from $article and $myObj to create/update #__categories_ext
        // Use $article->id as the primary key if #__categories_ext
        // Your SQL goes here....

    }elseif($context=='com_content.article'){
        $attribs = new JRegistry;
        $attribs->loadString($article->attribs);
        $myObj = $attribs->toObject();
        // Use properties from $article and $myObj to create/update #__content_ext
        // Use $article->id as the primary key if #__content_ext
        // Your SQL goes here....

    }
}

Es cierto que los datos se almacenan dos veces, una vez como contenido personalizado y otra vez en su tabla personalizada, pero doblando esa regla de normalización MÁS de lo que paga el trabajo y la pena que cuesta un hack central si tiene la intención de mantener el sitio actualizado para las versiones de Joomla . También ha dejado las cosas en tal estado que puede usar todos los com_content y otras extensiones que usan com_content sin ninguna consecuencia de sus hacks.

10
GDP

También necesitaba hacer esto recientemente y seguí algunos ejemplos en línea.

Hay algunos buenos ejemplos, incluidos los documentos de Joomla aquí

Aquí se puede encontrar otro tutorial agradable: Agregar campos de contenido personalizados a Joomla

Me doy cuenta de que no quieres usar un CCK, sin embargo, debes echar un vistazo a Fields Attach , que es muy bueno y simple

Espero que estos ayuden.

3
jonboy

Además de extender el núcleo, hay algunas extensiones que permiten extender el contenido de joomla con campos personalizados.

De lo contrario, las sugerencias y tutoriales proporcionados en las otras respuestas "lo mantendrán en marcha".

2
FFrewin