Pintar los extrafields de k2 de forma selectiva

Joomla

No cabe duda que los extrafields de k2 (Joomla) son de una utilidad enorme, pero la forma en la que por defecto se pintan en la ficha de un ítem, hace que pueda resultar un poco compleja la personalización de la presentación de los mismos.

K2 por defecto, se limita a recorrer los extrafields y pintarlos en una lista donde en cada línea esta el nombre, y el valor.

En la mayoría de proyectos esto puede resultar insuficiente, y lo que realmente queremos es poder pedir cualquier valor de cualquier extrafield en el momento que queramos. Es decir, obtenerlos de forma selectiva.

Para ello podéis utilizar esta función:

function get_extrafield_value($extra_fields, $name, $default = ''){
    foreach ($extra_fields as $extraField) {
        if ($extraField->name == $name) return $extraField->value;
    }
    return $default;
}

Al llamar a la función, le pasamos el vector (array) de extrafields, y el nombre del campo que queremos, y la función lo busca y nos devuelve el valor.

De esta forma, podemos presentar los extrafields como queramos:

get_extrafield_value($extra_fields, 'Tipo de vía').' '.get_extrafield_value($extra_fields, 'Nombre de la vía').', '.get_extrafield_value($extra_fields, 'Nº').'. '.get_extrafield_value($extra_fields, 'Código postal').' - '.get_extrafield_value($extra_fields, 'Localidad')

Esperamos que os ayude!

Problema al traducir un link de menú de K2 con joomFish

Joomla

Patada de joomfish a k2Si estamos trabajando en un portal con K2 y JoomFish, es fácil que nos ocurra que no funcionan bien los links de los menús del tipo ‘categoría de K2’ o similar.
Si vamos al administrador de traducciones de joomfish y vemos las traducciones de esos ítems de menú, veremos que están incompletos.
Lo peor es que aunque le demos a copiar y guardemos, vemos que el link sigue mal traducido.

Para arreglar esto tenemos que aplicar la solución encontrada aquí.

Básicamente se trata de:

1. Ir a la ruta “administrator/components/com_joomfish/contentelements”
2. Editar el archivo “menu.xml” (haz copia)
3. Sustituir esto: <field type=»readonlytext» translate=»1″  posthandler=»saveUrlParams» prehandler=»checkUrlType»>Link</field>
4. Por esto: <field type=»text» length=»100″ maxlength=»255″ translate=»1″>Link</field>

Una vez hecho esto, ya podemos ir al administrador de traducciones, y editar todos los items de menú para ahora sí, poder copiar la url original y guardar sin problemas.

Si además, tenemos el sh404sef activado puede que sigamos teniendo problemas.
En este caso, solo tenemos que ir al panel de control de sh, y en la opción “Enable URL optimization” ponemos NO.
Aunque parezca que no tiene sentido, el resultado es muy satisfactorio. Se mantienen las url’s optimizadas.

Etiquetas en categorías de K2 de Joomla

Joomla

Hay una opción para poder poner etiquetas a las categorías de K2. Se trata de utilizar el sistema de etiquetas (tags) de los artículos o items de k2 pero integrándolo dentro de las categorías.

Para hacer esto básicamente hay que modificar la tabla jos_tag_xref y sustituir el campo itemID por el campo catID.

Después se modificaran los controllers, models y views (MVC) y listo.

El problema es que las etiquetas solo se podrán usar en las categorías y no en los items, algo que por otro lado a mi me vino muy bien. A mí me sirvió para relacionar categorías mediante etiquetas y poder desarrollar un modulo que mostrara las categorías en función de las etiquetas relacionadas con estas.

Os dejo los archivos para poder implementarlo en vuestro K2. El articulo original lo encontré en un post del foro de K2 (aquí). He añadido la solución a unos bugs en javascripts que sobraban de las vistas de la administración y que hacían que el autocomplete no funcionara bien. Lo he añadido en un archivo txt explicando lo que he hecho por si sirve.

Esta manera de hacerlo es poco aconsejable porque hay que modificar el core de K2 y quizá en próximas actualizaciones puedan surgir problemas, pero no he encontrado nada mejor de momento, ¿alguna sugerencia?. Mientras tanto pensare alguna manera de poder mejorar este sistema.

Archivos: categoriestags

Problemas con el botón de compartir de Twitter en K2 de joomla

Joomla/Twitter

Hoy me he dado cuenta de que el botón de compartir de twitter del componente k2 de joomla no funcionaba. Es algo que ya habia visto en otras páginas, directamente me enviaba al inicio de twitter sin twittearme lo que quería. Asi que me he puesto a indagar y he visto que en las páginas que funciona la url era diferente a la que te facilita k2.
La url incorrecta es:
http://twitter.com/home/?status=Reading+@username+titulo-articulo+tinyurl
La url correcta es:
http://twitter.com/intent/tweet?text=titulo&url=tinyurl&via=username
Para solucionarlo hay que hacer lo siguiente:

  1. Buscamos en components/k2/views/item los archivos view.raw.php y view.html.php
  2. En el archivo view.raw.php sobre la línea 214 la comentamos y ponemos bajo la que tiene la url correcta. Fijaros que hace uso ya de tinyurl y del username y demás:
    //$item->twitterURL = 'http://twitter.com/home/?status='.urlencode('Reading @'.$params->get('twitterUsername').' '.$item->title.' '.$itemURLForTwitter);
    $item->twitterURL = 'http://twitter.com/intent/tweet?text='.urlencode($item->title).'&url='.urlencode($itemURLForTwitter).'&via='.urlencode($params->get('twitterUsername'));
  3. En el archivo view.html.php sobre la línea 221 la comentamos y ponemos bajo la que tiene la url correcta. Es identico al anterior archivo.

Con esto se nos abrirá un popup que nos pedirá loguearnos en twitter y sino saldrá el texto a compartir. Una vez twitteado este se cerrará.

Error visualizando la ficha de un ítem como editor de backend en K2 de Joomla

Joomla

Enlazando con el post anterior, resulta que al actualizar la versión del plugin K2fields a la 0.4.8, ocurre que cuando un usuario de tipo ‘editor’ de backend intenta editar un ítem, al cabo de un tiempo de espera la página se queda en blanco.

Como en el post anterior, solo que ahora solo le pasa a los usuarios de back que no son administradores y antes de que se muestre el formulario. No al guardar.

Depurando el plugin, vemos que hay una parte del código que parece encargarse de alguna forma, de que ese editor solo pueda modificar los filtros de los artículos que sean suyos o modificados por él, o una cosa así.

Por ahora, a falta de disponer de más información, simplemente hemos evitado que los usuarios editores ejecuten el trozo de ‘código corrupto‘, igual que lo evitan los administradores.

Para ello, tenemos que ir a la carpeta ‘\plugins\k2\’ y editar el archivo ‘k2fields.php’.
Buscamos la función ‘static function getUserAddedExtraFieldValues($filter = null, $jsonEncoded = true)’.
Y en el trozo:

if ($filter) {
    $user = & JFactory::getUser();
    $userId = $user->get ('id');
    $db = & JFactory::getDBO();
    $query = "SELECT extra_fields FROM #__k2_items WHERE created_by = {$userId} OR modified_by = {$userId}";
    $db->setQuery($query);
    $rows = $db->loadObjectList();

    foreach ($rows as $row) {
        $values = $json->decode($row->extra_fields);

        if (!is_array($values)) continue;
        
        foreach ($values as $value) {
            $exists = isset($nonSaveableFields[$value->id])
                 && !is_object($value->value) // need to check how multiple select saves values
                 && isset($nonSaveableFields[$value->id][$value->value]);

            if ($filter == plgk2k2fields::FILTER_NOT_ADDED_BY_USER && $exists
             || $filter == plgk2k2fields::FILTER_ADDED_BY_USER && !$exists) {
                unset($nonSaveableFields[$value->id][$value->value]);
            }
        }
    }

    foreach ($nonSaveableFields as $n => $nonSaveableField) {
        if (sizeof($nonSaveableField) == 0) {
            unset($nonSaveableFields[$n]);
        }
    }
}

Cogemos el primer if, y le ponemos:

if (false){//($filter) {

Con esto por el momento se soluciona el problema.

Vamos a intentar ponernos en contacto con el autor para comentarle el ‘bug’, y a ver si se puede resolver en la siguiente versión.

Si detectáis algún efecto colateral, no dudéis en comentarlo.

Error al guardar un ítem en K2 de Joomla

Joomla

Si cuando tienes cierto volumen en un K2, vas a guardar un ítem, y ves que tarda demasiado tiempo y al final te sale una pantalla en blanco, posiblemente estés teniendo el mismo problema que nosotros.

Mira a ver si tienes el plugin “K2Fields” y si este está en su versión 0.4.7 o anterior. Si es así, ahí va a estar el problema…

Simplemente descarga la última versión del K2Fields (ahora la 0.4.8), desinstala la vieja e instala la nueva, y a funcionar.

Además, no hay que preocuparse por la configuración que tuviéramos de los extra_fiels ni de sus valores. Eso va a parte.

Esperamos haber sido de ayuda.