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á.

Twitter lanza el botón Follow para poder seguir directamente desde la web

Twitter

Habemus botón Follow“.

Acabado de lanzar y ya lo hemos integrado para que veáis como queda. xD

El código como podéis ver es sencillísimo:

<a href="http://twitter.com/jorsang1" class="twitter-follow-button" data-show-count="false" data-lang="es">@jorsang1</a>
<a href="http://twitter.com/MadBlake" class="twitter-follow-button" data-show-count="false" data-lang="es">@MadBlake</a>
<a href="http://twitter.com/tw_ticnology" class="twitter-follow-button" data-show-count="false" data-lang="es">@tw_ticnology</a>
<script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>

Si queréis ver las opciones de personalización que ofrece el botón, lo tenéis muy bien documentado en la página oficial: http://dev.twitter.com/pages/follow_button

Venga! Nos seguimos!! xD

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.

Depurando en fichero de log de joomla. Midiendo tiempos.

Joomla

Joomla ofrece un sencillo pero bastante completo sistema de log para volcar a archivo los resultados de nuestra depuración en tiempo de ejecución.

Una forma de utilizarlo rápidamente es ir a la clase donde se encuentra la función que queremos depurar (por ejemplo K2ModelItem en ‘administrator\components\com_k2\models\’) y añadirle la función:

function simpleLog($comment, $userId = 0)
{
    // Incluimos las librerias
    jimport('joomla.error.log');
    $options = array(
        'format' => "{DATE}\t{TIME}\t{USER_ID}\t{COMMENT}"
    );
    // Creamos la instancia de el fichero de log y lo usamos
    $log = &JLog::getInstance(AJAX_ERROR_LOG, $options);
    $log->addEntry(array('comment' => $comment, 'user_id' => $userId));
}

Con esta función, ya podemos depurar cualquier cosa mostrándolo en un archivo de log (En el ejemplo: AJAX_ERROR_LOG).

Enlazando con el título del post, os pongo un ejemplo para la obtención de tiempos dentro del método ‘save’ de esta clase:

var $t1 = time();

....

var $t2 = time();
K2ModelItem::simpleLog("Tiempo en realizar XXXX: " . round(abs($t2 - $t1) / 1,2). " segundos");

Recuerda comprobar que hayan permisos de escritura sobre la carpeta de log que tienes configurada en la ‘configuracion global’ de joomla.

Más info: http://weblog.paulbernal.com/cms/joomla/generando-logs-hacia-archivos-en-joomla-1-5-con-jlog/