====== 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 ''''**. * L'exportació ''xhtml'' munta el '''' a mà (''inc/Action/Export.php''). Només hi posa '''', el '''' i el que afegeix ''tpl_metaheaders()''. * ''tpl_metaheaders()'' (''inc/template.php'') només afegeix ''generator'', ''robots'', ''theme-color'' i ''keywords''. 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é ([[https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/meta/name/viewport|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 ^ | [[https://www.dokuwiki.org/plugin:metaheaders|metaheaders]] | Només actua quan l'acció és ''show'' (''%%if ($ACT != 'show' || !page_exists($ID)) return;%%''). Amb ''do=export_xhtml'' no fa res | | [[https://www.dokuwiki.org/plugin:htmlmetatags|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" | | [[https://www.dokuwiki.org/plugin:mobiletable|mobiletable]] | Només adapta les taules al mòbil | ===== Els fitxers ===== Dos fitxers, a ''lib/plugins/exportviewport/''. ==== plugin.info.txt ==== <code - 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. </code> ==== action.php ==== <code 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', ]; } } </code> 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 carpeta ''exportviewport/'' amb els dos fitxers. - **Per FTP:** pujar la carpeta ''exportviewport/'', amb els dos fitxers, a ''lib/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\Extension'' o de l'esdeveniment ''TPL_METAHEADER_OUTPUT'', caldria adaptar ''action.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/''. ===== Fonts ===== * [[https://github.com/dokuwiki/dokuwiki/blob/master/inc/Action/Export.php|DokuWiki – inc/Action/Export.php]] * [[https://github.com/dokuwiki/dokuwiki/blob/master/inc/template.php|DokuWiki – inc/template.php]] * [[https://github.com/dokuwiki/dokuwiki/blob/master/lib/tpl/dokuwiki/main.php|DokuWiki – lib/tpl/dokuwiki/main.php]] * [[https://www.dokuwiki.org/devel:event:tpl_metaheader_output|DokuWiki – esdeveniment TPL_METAHEADER_OUTPUT]] * [[https://www.dokuwiki.org/devel:action_plugins|DokuWiki – connectors d'acció]] * [[https://www.dokuwiki.org/devel:plugin_info|DokuWiki – plugin.info.txt]] * [[https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/meta/name/viewport|MDN – meta viewport]]