Plugin Export Viewport
Connector propi de VikiTaldia. Fa que les pàgines exportades amb do=export_xhtml es vegin bé al mòbil: el text es redistribueix a l'amplada de la pantalla, en lloc d'encongir-se tota la pàgina com si fos una imatge.
| Nom | Valor |
|---|---|
| Carpeta | lib/plugins/exportviewport/ |
| Classe | action_plugin_exportviewport |
| Tipus | Connector d'acció (action plugin) |
| Autor | A. Moseguí / TT22 |
| Data | 14-10-2026 |
| Versió de DokuWiki | 2025-05-14b «Librarian» |
El problema
L'app Taldia obre el relat sencer de cada notícia a VikiTaldia amb el sufix &do=export_xhtml, que dona la pàgina sense la interfície de la wiki (menú, barra lateral, eines). Per exemple:
https://vikitaldia.tt22.cat/doku.php?id=tema:cat:pau_casals-i_am_a_catalan&do=export_xhtml
- A l'ordinador, en estrènyer la finestra, el text es redistribueix bé.
- Al mòbil, la pàgina s'encongeix sencera i el text queda diminut.
La causa
La pàgina exportada no porta l'etiqueta <meta name=«viewport»>.
- L'exportació
xhtmlmunta el<head>a mà (inc/Action/Export.php). Només hi posa<meta charset=«utf-8» />, el<title>i el que afegeixtpl_metaheaders(). tpl_metaheaders()(inc/template.php) només afegeixgenerator,robots,theme-colorikeywords. No afegeix cap viewport.- Qui posa el viewport a les pàgines normals és la plantilla (
lib/tpl/dokuwiki/main.php). L'exportació no fa servir la plantilla, i per tant se'l perd.
Sense viewport, el navegador del mòbil dibuixa la pàgina en una finestra virtual més ampla que la pantalla (per exemple de 980px) i després l'encongeix fins que hi cap. Al navegador de l'ordinador no hi ha aquesta finestra virtual, i per això allà es veu bé (MDN – viewport).
Com ho resol
L'exportació xhtml crida tpl_metaheaders(), i aquesta funció llança l'esdeveniment TPL_METAHEADER_OUTPUT abans d'escriure les metadades. El connector s'hi enganxa:
- si l'acció és
export_xhtml, afegeix<meta name=«viewport» content=«width=device-width,initial-scale=1»>. És la mateixa etiqueta que posa la plantilla a les pàgines normals; - en qualsevol altre cas, no fa res. Les pàgines normals ja porten el viewport de la plantilla, i així no es duplica.
No toca el nucli de DokuWiki ni la plantilla, i per tant sobreviu a les actualitzacions.
Per què un connector propi
Abans de fer-lo es va buscar al catàleg de DokuWiki si n'hi havia cap que ja ho fes:
| Connector | Per què no serveix |
|---|---|
| metaheaders | Només actua quan l'acció és show (if ($ACT != 'show' || !page_exists($ID)) return;). Amb do=export_xhtml no fa res |
| htmlmetatags | Les etiquetes s'escriuen dins de cada pàgina ({{htmlmetatags>…}}): caldria posar-les a mà a totes. La compatibilitat amb les versions de DokuWiki a partir del 2018 hi consta com a «unknown» |
| mobiletable | Només adapta les taules al mòbil |
Els fitxers
Dos fitxers, a lib/plugins/exportviewport/.
plugin.info.txt
- plugin.info.txt
base exportviewport author A. Moseguí / TT22 date 2026-10-14 name Export Viewport desc Afegeix l'etiqueta meta viewport a les pàgines exportades amb do=export_xhtml, perquè al mòbil el text es redistribueixi en lloc d'encongir-se.
action.php
- action.php
<?php /* * -- nom: action.php -- * -- connector: exportviewport (DokuWiki) -- * -- autor: A. Moseguí / TT22 -- * -- descripció: Afegeix <meta name="viewport"> a les pàgines exportades amb * do=export_xhtml. * * Per què: l'exportació xhtml munta el <head> a mà (inc/Action/Export.php) * i no passa per la plantilla, que és qui posa el viewport a les pàgines * normals (lib/tpl/dokuwiki/main.php). Sense viewport, el mòbil dibuixa la * pàgina en una finestra virtual ampla i l'encongeix com si fos una imatge. * * Com: l'exportació xhtml crida tpl_metaheaders(), que llança l'esdeveniment * TPL_METAHEADER_OUTPUT abans d'escriure les metadades. Aquí s'hi afegeix * el viewport, NOMÉS si l'acció és export_xhtml: les pàgines normals ja el * porten de la plantilla i no s'ha de duplicar. * * L'etiqueta és la mateixa que posa la plantilla dokuwiki. -- */ use dokuwiki\Extension\ActionPlugin; use dokuwiki\Extension\Event; use dokuwiki\Extension\EventHandler; class action_plugin_exportviewport extends ActionPlugin { /** * Enganxa el gestor a l'esdeveniment de les metadades del <head>. */ public function register(EventHandler $controller) { $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'addViewport'); } /** * Afegeix el viewport a les metadades, només a l'exportació xhtml. * * @param Event $event $event->data és la taula de capçaleres (meta, link, script…) * @param mixed $param no se'n fa servir cap */ public function addViewport(Event $event, $param) { global $ACT; if ($ACT !== 'export_xhtml') { return; } $event->data['meta'][] = [ 'name' => 'viewport', 'content' => 'width=device-width,initial-scale=1', ]; } }
Les classes ActionPlugin, Event i EventHandler són a l'espai de noms dokuwiki\Extension. És el que fa servir la versió 2025-05-14b «Librarian» (inc/Extension/ActionPlugin.php).
Instal·lació
Hi ha dues maneres:
- Des de la wiki: Administració → Gestor d'extensions → instal·lació manual, i pujar
exportviewport.zip. El ZIP conté la carpetaexportviewport/amb els dos fitxers. - Per FTP: pujar la carpeta
exportviewport/, amb els dos fitxers, alib/plugins/.
Comprovació
- Al gestor d'extensions, «Export Viewport» ha de sortir com a actiu.
- Obrir al mòbil una pàgina amb
&do=export_xhtml. El text s'ha de redistribuir a l'amplada de la pantalla. - Si no es veu bé, mirar el codi font de la pàgina: dins del
<head>hi ha d'haver<meta name=«viewport» content=«width=device-width,initial-scale=1»>.
Estat: instal·lat i comprovat al mòbil el 14-10-2026.
Manteniment
- Actualitzacions de DokuWiki: el connector no toca cap fitxer del nucli ni de la plantilla, i no s'hi perd. Si una versió futura canviés el nom de les classes de
dokuwiki\Extensiono de l'esdevenimentTPL_METAHEADER_OUTPUT, caldria adaptaraction.php. - Si algun dia l'exportació ja portés viewport de sèrie, el connector el duplicaria. Llavors es podria desactivar des del gestor d'extensions.
- Desactivar-lo: des del gestor d'extensions, o esborrant la carpeta
lib/plugins/exportviewport/.
