Wikipedia:Bar/Discussioni/Template con regex: è possibile?

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Template con regex: è possibile?


Salve a tutti,

sto scrivendo un template per... al momento Vikidia, poi - se vorrete - per tutti. Data la pagina si crea una mappa concettuale della stessa.

Tutto molto bello ma, nel codice del logo, ho inserito [[File:Wiki2map logo.svg|200px|center|link=http://wiki2map.org/index.html?wiki={{SERVERNAME}}&topic={{#titleparts: {{fullurl:{{FULLPAGENAME}}}} | 1 | 5 }}]] che, tradotto, se ci clicchi sopra ti mando alla pagina dove devi andare con i parametri.

Il problema è che se la pagina ha due o più parole (quindi uno o più spazi) il |link=bla bla bla viene interpretato come alt, ciè come testo da mostrare quando si va sopra l'immagine.

DOMANDA So per certo che si possono costruire regex, qui (vedi bot), ma come faccio a usare una semplicissima regex dentro un Template che ogni volta che incontra uno spazio mi mette un bel %20?

Oppure esiste un'altra soluzione che a me non viene in mente?

Grazie in anticipo,

--Giacomo Alessandroni (msg) 18:01, 27 lug 2020 (CEST)[rispondi]

[@ Giacomo Alessandroni] nel link se non erro, basterebbe sostituire degli underscore (_) agli spazi (su Wikipedia è così, se Vikidia usa mediawiki dovrebbe esserlo anche lì) --ValeJappo【〒】 18:58, 27 lug 2020 (CEST)[rispondi]
Sì, quasi. Dovrei sostituire gli spazi con dei %20 (ma anche underscore andrebbe bene, poi aggiustiamo su Wiki2map, al limite). Il nome della pagina lo estraggo da {{#titleparts: {{fullurl:{{FULLPAGENAME}}}} | 1 | 5 }}, pertanto mi piacerebbe passare questo parametro a qualcosa del tipo {{#regex: <string> | <regex>}}, ma questo secondo non funziona né nei template, né nelle sandbox. --Giacomo Alessandroni (msg) 19:08, 27 lug 2020 (CEST)[rispondi]
Facciamo un po' di chiarezza :-) I bot usano spesso le regex per come sono programmati, ma non c'entra niente con gli strumenti del software MediaWiki. Per esempio, io uso pywikibot ma lo faccio girare sul mio laptop perché ho installato python. Comunque sì, qui si possono usare le espressioni regolari, per lo meno dall'introduzione di Aiuto:Lua. Le espressioni regolari di Lua sono mooooooolto meno potenti di quelle che spesso trovi in giro (PCRE ad esempio), ma per un replace bastano e avanzano. Qui abbiamo il Modulo:String, scritto appositamente per la manipolazione delle stringhe, di cui usiamo la funzione replace:
{{#invoke:String|replace|stringa_sorgente|stringa_pattern|nuova_stringa|numero_di_sostituzioni|plain_flag}}
ad esempio:
{{#invoke:String|replace|stringa sorgente| |_}}</pre> → stringa_sorgente
Detto ciò, devi:
  1. assicurarti che su Vikidia abbiate installato Scribunto (per poter usare i moduli Lua);
  2. importare il Modulo:String;
  3. magari importare alcuni template per la manipolazione delle stringhe (come appunto {{Str replace}}), che fanno da intermediari, per non chiamare direttamente il modulo fuori dal ns10.
Per future questioni tecniche ti suggerisco di rivolgerti alla WP:OFFICINA. Ciao! --Horcrux (msg) 10:06, 28 lug 2020 (CEST)[rispondi]
Oppure leggere la documentazione mw:Help:Magic words#URL encoded page names. Prova ad usare {{FULLPAGENAMEE}} --β16 - (talk) 10:23, 28 lug 2020 (CEST)[rispondi]
RISOLTO! (e grazie a tutti e due. ;-)
Ho utilizzato il codice {{#invoke:String|replace|{{FULLPAGENAMEE}}|_|%20}} e funziona che è una bellezza. Con FULLPAGENAMEE ero già riuscito a ottenere il link, però poi nella mappa mentale comparivano gli underscore (bruttino, anche perché il prossimo passaggio sarà Wikiversity, dove le pagine hanno mille parole) e poi chiunque vorrà usarlo.
Bella la soluzione con String, purtroppo {{Str replace}} non fa il suo lavoro perché se gli passo uno spazio non lo identifica come tale (per esempio sarebbe molto bello utilizzarlo per rimuovere dalle wiki i doppi spazi che talvolta capitano, nella digitazione), ma il Modulo:String (che abbiamo) basta e avanza.
Infine, non sapevo della WP:OFFICINA. La prossima volta (c'è sempre una prossima volta) busserò lì. --Giacomo Alessandroni (msg) 15:09, 29 lug 2020 (CEST)[rispondi]