mpradaestudio
Usuario (Colombia)
El Plugin Content - Pagebreak Una vez tenemos paginado nuestro artículo, si no nos aparece su Tabla de contenidos o Índice, tendremos que dirigirnos, en el panel de control del Administrador, a Extensiones > Gestor de Plugins, y Editar el Plugin Content - Pagebreak haciendo click sobre él. Ya en su pantalla de edición, a la derecha, en los Parámetros, tendremos que seleccionar 'Mostrar' Tabla de contenidos (TOC, Table Of Contents). Ahora bien, en el momento en que introducimos este índice, Joomla suprime la navegación por páginas, en la parte inferior del artículo, de manera que nos obliga a elegir entre la opción sin índice: Figura 1: Artículo sin índice o tabla de contenidos o con índice, pero sin navegador inferior completo, con todas sus páginas: Figura 2: Artículo con índice Personalmente, esta disyuntiva no me satisface, porque el usuario, cuando utiliza la navegación de la parte inferior del artículo, carece de perspectiva, al no saber en qué página se encuentra (especialmente en artículos con páginas largas, donde el índice y el título de artículo/página se pierden de vista al bajar con el scroll). Para resolver este problema basta con darle un par de toques al archivo php que controla la ejecución de la paginación. Para ello tenemos primero que localizarlo. El archivo pagebreak.php Es el archivo pagebreak.php, y se encuentra en: [nombre-de-tu-web]/[directorio-joomla(si no está en raíz)]/plugins/content/pagebreak.php Conviene ahora que nos descarguemos este archivo vía ftp y guardemos el original a buen recaudo, por si las moscas. Lo duplicamos y, tras renombrar el original (podemos llamarlo, por ejemplo, "pagebreak-ORIGINAL.php", podemos empezar a trabajar sobre el nuevo. Una primera optimización que podemos aplicar es ésta: añadirle, al navegador inferior « Anterior - Siguiente », el número de página en que el usuario se encuentra, así como el total de ellas, tal como se muestra en la siguiente Figura: Figura 3: Artículo con índice y localización de página en el navegador inferior Para ello, nos vamos a la parte final del documento, donde encontraremos una función llamada plgContentCreateNavigation, que es precisamente la que se ocupa de crear la navegación 'anterior-siguiente'. Sólo tenemos que modificar el código original: function plgContentCreateNavigation( &$row, $page, $n ) { $pnSpace = ""; if (JText::_( '<' ) || JText::_( '>' )) $pnSpace = " "; if ( $page < $n-1 ) { $page_next = $page + 1; $link_next = JRoute::_( '&limitstart='. ( $page_next ) ); // Next >> $next = '<a href="'. $link_next .'">' . JText::_( 'Next' ) . $pnSpace . JText::_( '>' ) . JText::_( '>' ) .'</a>'; } else { $next = JText::_( 'Next' ); } if ( $page > 0 ) { $page_prev = $page - 1 == 0 ? "" : $page - 1; $link_prev = JRoute::_( '&limitstart='. ( $page_prev) ); // << Prev $prev = '<a href="'. $link_prev .'">'. JText::_( '<' ) . JText::_( '<' ) . $pnSpace . JText::_( 'Prev' ) .'</a>'; } else { $prev = JText::_( 'Prev' ); } $row->text .= '<div>' . $prev . ' - ' . $next .'</div>'; } por este otro (muestro en rojo las añadiduras y en naranja los comentarios explicativos): function plgContentCreateNavigation( &$row, $page, $n ) { $pageActual = $page + 1; //Creamos variable de la página actual $pnSpace = ""; if (JText::_( '<' ) || JText::_( '>' )) $pnSpace = " "; if ( $page < $n-1 ) { $page_next = $page + 1; $link_next = JRoute::_( '&limitstart='. ( $page_next ) ); // Next >> $next = '<a href="'. $link_next .'">' . JText::_( 'Next' ) . $pnSpace . JText::_( '>' ) . JText::_( '>' ) .'</a>'; } else { $next = JText::_( 'Next' ); } if ( $page > 0 ) { $page_prev = $page - 1 == 0 ? "" : $page - 1; $link_prev = JRoute::_( '&limitstart='. ( $page_prev) ); // << Prev $prev = '<a href="'. $link_prev .'">'. JText::_( '<' ) . JText::_( '<' ) . $pnSpace . JText::_( 'Prev' ) .'</a>'; } else { $prev = JText::_( 'Prev' ); } $row->text .= '<div>' . $prev . ' - ' . $pageActual . ' de ' . $n . ' - ' . $next .'</div>'; //Añadimos localizador y número total de páginas } Y ya tenemos el navegador así: « Anterior - x (núm. de pág. actual) de n (total de págs.) - Siguiente » Sin embargo, puede que esto no acabe de convencernos... Quizá, lo que nosotros queremos es que el usuario pueda elegir a qué página desplazarse, tanto desde el índice como desde el navegador inferior: ¿Por qué tienen que excluirse mutuamente? Pues porque así lo manda el php. En consecuencia, debemos modificar nuevamente éste para evitar su tiranía, que nos obliga a elegir entre uno u otro modo de navegación. Conseguir esto es aún más fácil que lo anterior: ni siquiera tenemos que añadir código alguno, basta con suprimir (o comentar) algunas líneas. En primer lugar, si queremos que aparezca, además del índice, el navegador inferior completo con todas las páginas, tenemos que evitar que aparezca el navegador simple « Anterior - Siguiente », pues en caso contrario se duplicarían o chocarían entre sí. Para ello, comentamos (o suprimimos) la llamada a la función plgContentCreateNavigation. Esta llamada se encuentra en las líneas 151-154 del archivo original. En este caso la comentaremos en lugar de suprimirla: //ANULAMOS LLAMADA A LA FUNCIÓN DEL NAVEGADOR INFERIOR // adds navigation between pages to bottom of text /* if ( $hasToc ) { plgContentCreateNavigation( $row, $page, $n ); } */ Una vez hecho esto, sólo nos queda asegurarnos de que el navegador completo aparece aunque hayamos habilitado la función de índice del artículo. En las líneas siguientes a las anteriores (156-159 en el original) tenemos el condicional if que ordena que, si no hay índice, aparezca el navegador completo (y, viceversa: que, si está habilitado el índice, el navegador por páginas no aparezca, al no cumplirse la condición). Pues bien: basta entonces eliminar el condicional, para que el navegador completo aparezca siempre. Para ello, comentamos ahora las líneas del condicional, dejando en cambio la consecuencia (de tal manera que ésta se ejecute siempre): //COMENTAMOS LA SENTENCIA CONDICIONAL PARA QUE EL NAVEGADOR COMPLETO SE MUESTRE TAMBIÉN CON EL TOC // page links shown at bottom of page if TOC disabled // if (!$hasToc) { $row->text .= $pageNav->getPagesLinks(); // } Y ya está: Figura 4: Artículo con índice y navegador inferior completo simultáneos Aquí puedes descargarte el archivo modificado pagebreak.php, por si quieres ahorrarte trabajo y, simplemente, sobreescribir el original con éste. Si te atrae más la opción intermedia (navegador con localizador y total de páginas) sólo tienes que des-comentar los últimos comentarios citados (de tal manera que, por una parte, no aparezca el navegador completo al habilitarse el índice y, por otra y paralelamente, la función modificada plgContentCreateNavigation vuelva a ejecutarse). Resaltar la página actual en el índice Ahora bien: quizá esto no os parezca todavía suficiente... Es posible que deseéis que la página actual del usuario aparezca resaltada en el Índice del artículo... De esta manera, el usuario sabe dónde se encuentra a golpe de vista, consultando dicho índice, sin tener que recurrir al título del artículo o al navegador inferior. Para conseguir esto, tenéis que abrir el archivo template.css de vuestra plantilla (en el directorio del mismo nombre, css) e insertar las siguientes líneas de código: table.contenttoc .active { /*entre las llaves, el aspecto diferenciado que quieras darle al título de la página actual. En mi caso: */ font-weight: bold; } (Por cierto: esta aportación se la debo a Olaf Offick, quien me la facilitó en un tema del foro de Joomla.org, donde podéis encontrar más información para personalizar el índice de vuestros artículos. Eso sí, en inglés.) En principio, podéis insertar el código en cualquier parte del archivo, pero lo lógico es que localicéis primero las propiedades css del table.contenttoc (por ejemplo, mediante la función de búsqueda, Ctrl + F), y lo insertéis tras ellas. Tras haber insertado este código la paginación del artículo y su índice se mostrarán más o menos así: Figura 5: Artículo con la página actual destacada en el índice Podéis observar que la página actual, Recursos, aparece en negrita. Éste es un resalte discreto, pero las posibilidades son múltiples, tantas como ofrece el css: color y tamaño de fuente, subrayado, etc. Otros ajustes con css Hacer que desaparezca el encabezamiento Índice del artículo: table.contenttoc th { display: none; } Remover el marcador de página (x de y): .pagenavcounter { display:none; } Si no os gusta el círculo negro que antecede al nombre de la página, lo podéis cambiar asimismo en el template: basta con que vayáis a las siguientes líneas de código: table.contenttoc td { padding: 1px 5px 1px 25px; background: url(../images/bullet-list.gif) 5% 50%; } y cambiéis la imagen bullet-list.gif por aquélla de vuestra elección (para ello, habréis tenido previamente que subir vuestra imagen a la carpeta images de vuestro Joomla). Terminaremos este tutorial con un último toquecito, relativo precisamente a este bullet-list o círculo negro. Resulta que, en monitores panorámicos a resolución de 1680x1050, los círculos negros se montan sobre los textos, lo que queda francamente mal... Para corregir esto, podéis hacer el siguiente cambio, en las mismas líneas de código antes citadas: table.contenttoc td { padding: 1px 5px 1px 25px; background: url('/../images/bullet-list.gif') no-repeat 4% /* cambiado desde el 5% original */ 50%; } Lo único que hemos cambiado aquí es el 5%, bajándolo a un 4%. Con esta medida, los círculos se verán un poco más separados de los textos en resoluciones no panorámicas; pero esta separación es apenas perceptible y, como contrapartida, se verá perfecto en resoluciones panorámicas. Fuente: Mundo Joomla