Módulo de listado de categorias K2 dinámico (2)

Hace un par de posts contabamos como modificar el módulo ‘mod_k2_tools’ para hacer un listado de categorias dinámico de forma que muestre las categorías hijas de la actual.

Ahora, os enseñamos las modificaciones que tendríamos que hacer si lo que queremos es que se muestren siempre las categorias hijas de la categoría padre de la categoría actual.

Supongo que me entendeis, sinó, almejor viendo el codigo del helper de nuestro ‘mod_k2_tools’ personalizado, lo podreis entender mejor.

Lo primero que tenemos que hacer es añadir una función para recuperar el padre de una categoría como esta:

function _getCatParent($id) {
    $user = &JFactory::getUser();
    $aid = (int) $user->get('aid');
    $id = (int) $id;
    $db = &JFactory::getDBO();
    $query = "SELECT * FROM #__k2_categories  WHERE id={$id} AND published=1 AND trash=0 AND access<={$aid} ";
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    if ($db->getErrorNum()) {
        echo $db->stderr();
        return false;
    }

    if (count($rows)) {
        return $rows[0]->parent;
    } else {
        return false;
    }
}

Después tendremos que modificar el método ‘treerecurse’ sutituyendo:

if (($root_id != 0) && ($level == 0)) {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$root_id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
}

Por:


$catParentid = $catid;
while (modK2ToolsHelper::_getCatParent($catParentid) > 0) { $catParentid = modK2ToolsHelper::_getCatParent($catParentid); }

if (($root_id != 0) && ($level == 0)) {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$root_id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else if ($catParentid != 0) {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$catParentid} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
}

Módulo de listado de categorias K2 dinámico

Mediante el módulo ‘mod_k2_tools’ podemos hacer un listado de categorias; el problema es que siempre va a ser fijo.

Si queremos que el módulo cambie mostrando las subcategorias de la categoría actual tenemos que modificar el ‘helper.php’ de la siguiente forma:

Linea 282:

if (($root_id != 0) && ($level == 0)) {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$root_id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
}

Por:

if (($root_id != 0) && ($level == 0)) {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$root_id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else if ($catid != 0) {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$catid} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
} else {
     $query = "SELECT * FROM #__k2_categories WHERE parent={$id} AND published=1 AND trash=0 AND access<={$aid} ORDER BY {$orderby}";
}

Por último lo único que temos que hacer es no seleccionar ninguna categoría en la configuración del módulo.

Sugerimos duplicar el módulo mod_k2_tools por mod_k2_tools_cat_param o algo por el estilo para no perder el original. XD

Personalizar formulario para añadir artículos de los usuarios en K2 – Categorías

Personalizar categorias del formulario para añadir artículos de los usuarios en K2En el post anterior contabamos como personalizar el formulario para añadir artículos de un usuario registrado de K2, modificando el archivo ‘form.php’.

Hay una cosa que no se puede hacer modificando este archivo, y es, modificar la forma en la que se eligen las categorías.

En nuestro caso, queríamos que el usuario pudiera crar articulos solo en las categorías hijas de las que habiamos marcado en la configuración del grupo de usuario ‘registrados’.

K2, por defecto, muestra todas las categorías, y solo como seleccionables las categorias marcadas y sus hijas (si marcas esa opción). Nosotros en cambio lo queremos es que muestre solo el árbol de las categorias elegidas, y que solo deje habilitadas las categorías hijas y no la raiz.

Para conseguir esto, solo tenemos que hacer las siguientes modificaciones al archivo “/components/com_k2/views/item/view.html.php”:
* Si alguien sabe si es posible sobrecargar esta vista en la plantilla que nos lo haga saber. XD

Línea 562:

for ($i = 0; $i < sizeof($categories); $i++) {
     if (!$user->authorize('com_k2', 'add', 'category', $categories[$i]->value))
          $categories[$i]->disable = true;
}

Por:

$num_categories = sizeof($categories);
for ($i = 0; $i < $num_categories; $i++) {
     if (!$user->authorize('com_k2', 'add', 'category', $categories[$i]->value)) {
          unset($categories[$i]);
     } else {
          // dehabilitamos la seleccion de las categorias raiz (las que no empiezan por -)
          $cat_text = str_replace('&nbsp;', '', $categories[$i]->text);
          if (substr(ltrim($cat_text), 0, 1) != '-') {
                    $categories[$i]->disable = true;
          }
     }
}

Personalizar formulario para añadir artículos de los usuarios en K2

Cuando habilitamos la edición FrontEnd en K2, tenemos la posibilidad de que los usuarios añadan sus propios artículos en nuestro sitio web.

Por defecto k2, da al usuario un formulario completo como el que ve el administrador. Por suerte, desde las preferencias de K2 podemos elegir si queremos o no que vea algunas cosas, pero hay otras cosas, que por desgracia, no se pueden configurar.

Para poder hacer una personalización completa lo único que podemos hacer es modificar el archivo: “/components/com_k2/views/item/tmpl/form.php“.
* Si alguien sabe si es posible sobrecargar esta vista en la plantilla que nos lo haga saber. XD

Algunos de los cambios más destacados que podemos hacer son:

1. Simplificar la tabla de los datos principales del artículo.
Por ejemplo, podemos querer dejar solo disponible el titulo y la categoria y quitar el alias, el publicado, el destacado, y las etiquetas.

2. Cambiar el logo de k2 por el de nuestra web.
Para ello, podemos localizar el “<h2 class=”header icon-48-k2″>” y ponerle:
style=”padding-left: XXXpx !important; background: url(https://test.masqueabogados.com/administrator/components/com_k2/images/MYLOGO.gif) no-repeat 0px 50%;”
Estas son las dos propiedades que nos haran falta controlar, una para que apunte a nuestro logo, y la otra para controlar el desplazamiento del texto dependiendo de la anchura del logo.

3. Eliminar los botones de opciones de bajo del editor
Esto es más que recomendable si además tenemos plugins que añaden funcionalidad avanzada en estos botones.
Para hacer esto, lo más sencillo es:
Localizar la linea: <?php echo $this->text; ?>
Y poner: <?php echo str_replace(‘<div id=”editor-xtd-buttons”>’, ‘<div id=”editor-xtd-buttons” style=”display:none;”>’, $this->text); //$this->text; ?>
Así ocultaremos esos controles avanzados al usuario.

Esperamos que os sea de ayuda.

Cambio del autor cuando editamos un artículo k2 de un usuario registrado

Nos hemos encontrado el problema de que cuando gestionamos los articulos de k2 que ha publicado un usuario, si entramos al editor de un artículo, y hagamos cambios o no, le damos a guardar, el artículo pasa a ser del ‘administrador’ con que estamos editando y deja de ser del usuario.

Evidentemente esto no esta bien resuelto en k2, ya que lo lógico es que por defecto se mantenga el autor del artículo.

El problema viene porque en la parte derecha en el desplegable que muestra los posibles autores, no salen los usuarios registrados, y por lo tanto solo podemos guardar los cambios como un usuario de backend.

La solución es sencilla, aunque por desgracia tenemos que ‘hackear’ el core de K2.

Cojemos el archivo ‘administrator/components/com_k2/views/item/view.html.php’


Línea 222: 
<<$lists['authors'] = JHTML::_('list.users', 'created_by', $active, false);>>
Por: 
<<$lists['authors'] = JHTML::_('list.users', 'created_by', $active, false, NULL, 'name', false);>>

Con este cambio, todo solucionado.

Si alguien sabe como podemos sobrecargar este tipo de archivos en joomla (como los templates de los componentes y los modulos) que lo comparta con nosotros en un comentario, porque es un problema muy extendido en la red, pero que almenos yo, no he encontrado solución.

Crear artículos desde entorno de usuario en K2

Una de las funcionalidades mas destacadas de K2, es la posibilidad de que los usuarios puedan crear articulos ellos mismos.

Aqui os dejamos una explicación de como se configura eso:

1º- Activamos el módulo mod_k2_login en la posicion donde queramos que los usuarios se loggen.

Este módulo funciona de forma muy similar al nativo de joomla (mod_login), solo que cuando el usuario esta loggeado, las posibilidades son mayores.

2º- Modificamos los permisos del grupo de usuarios ‘registrados’ de k2, para que puedan crear artículos.

Si en la administracion nos vamos a Componentes > K2 > Grupos de usuarios, veremos que aqui podemos gestionar diferentes tipos de grupos de usuarios y limitar las cosas que pueden hacer o no con los contenidos de k2.

3º- Comprobamos que la edición desde el front esta activada en la configuración de k2.

Esto lo podemos ver pinchando en el boton de ‘Preferencias’ una vez entras al panel del componente k2 en el back.
A mitad mas o menos, encontraremos una sección que dice ‘Edicion Frontend’.
La opción de habilitar, tiene que estar en Si.

4º- Si aun no sale el enlace para añadir articulo cuando el usuario esta registrado, puede que tengamos que desinstalar el componente JoomFish y resuelto

Por último, solo decir que si alguien sabe de algun plugin o algo para poder tener JoomFish y la edición frontend al mismo tiempo, lo invitamos a que lo deje en los comentarios. XD