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

La causa

La pàgina exportada no porta l'etiqueta <meta name=«viewport»>.

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:

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:

  1. 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.
  2. Per FTP: pujar la carpeta exportviewport/, amb els dos fitxers, a lib/plugins/.

Comprovació

  1. Al gestor d'extensions, «Export Viewport» ha de sortir com a actiu.
  2. Obrir al mòbil una pàgina amb &do=export_xhtml. El text s'ha de redistribuir a l'amplada de la pantalla.
  3. 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

Fonts