Le macro

Le macro consentono di inserire nuove funzionalità nelle normali pagine wiki; l'unica cosa che le rende speciali è che contengono delle macro. Se si modificano pagine tipo ModificheRecenti o InformazioniSulSistema, è possibile vedere cosa si intende.

Per ulteriori informazioni sulle possibili formattazioni, consultare AiutoSuModificaPagina.

Macro di ricerca

MoinMoin utilizza un nuovo motore di ricerca, che consente di svolgere ricerche sofisticate utilizzando sia il riquadro di ricerca interattiva sia una qualsiasi delle macro di ricerca. Per un ulteriore aiuto, consultare AiutoSuRicerche.

Macro


Descrizione

Esempio

<<AdvancedSearch>>


Crea un dialogo di ricerca avanzata nella pagina

Consultare CercaPagina

<<TitleSearch>>


Crea un riquadro di ricerca nella pagina che cerca tra i titoli delle pagine

Consultare CercaPagina

<<FullSearch>>


Crea un riquadro di ricerca nella pagina che cerca nel contenuto delle pagine

Consultare CercaPagina

<<FullSearch()>>


Elenca le pagine che contengono il titolo della pagina (come facendo clic sul titolo della pagina)

Consultare la pagina CategoriaCategoria

<<FullSearch(text)>>


Elenca le pagine che contengono il termine ricercato

  1. Accessibility/Documentation/GNOME2
  2. Accessibility/PythonPoweredAccessibility
  3. AiutoSuMacro
  4. Apps/Builder
  5. Apps/Builder/Features
  6. Apps/GTG/pubsub-server
  7. Apps/Games/Documentation
  8. Apps/Games/Features
  9. Attic/FootNotes
  10. Attic/GnomePowerManager/FAQ
  11. Attic/GtkLove/PatchTriaging/Issue6
  12. Attic/GtkLove/PatchTriaging/Issue7
  13. Attic/GtkLove/PatchTriaging/Issue8
  14. Attic/ScratchPad/TheAssistant
  15. BastienNocera/KernelWishlist
  16. BastienNocera/Ondav975w
  17. DaniloSegan
  18. Design/Playground/Games/Metadata
  19. Diversity/CoCWorkingGroup/Resources/CoCs/Review
  20. DocumentationProject/Planning/DeveloperDocs_2010_ideas
  21. Engagement/AnnualReport/2015/Hackfests
  22. Engagement/TeamMeetings/11-AUG-2015 (GUADEC BoF)
  23. Events/Brussels2006
  24. FoundationBoard/Minutes/20090703
  25. FoundationBoard/Minutes/20170207
  26. FoundationBoard/Minutes/20170214
  27. FoundationBoard/Minutes/20170221
  28. FoundationBoard/Minutes/20170228
  29. FoundationBoard/Minutes/20170307
  30. FoundationBoard/Minutes/20170314
  31. FoundationBoard/Minutes/20170328
  32. FoundationBoard/Minutes/20170404
  33. FoundationBoard/Minutes/20170411
  34. FoundationBoard/Minutes/20170418
  35. FoundationBoard/Minutes/20201109
  36. FoundationBoard/Minutes/20201216
  37. GUADEC/2006/PrintedContent/CoreAbst
  38. GUADEC2007/Booklet/sessionsAbst
  39. GnomeWeb/CmsRequirements
  40. GnomeWeb/CmsRequirements/DrupalEval
  41. GnomeWeb/CmsRequirements/MidgardEval
  42. GnomeWeb/CmsRequirements/PloneEval
  43. GnomeWeb/GuadecNotes
  44. Hackfests/IMContacts Social2011/Tasks/ContactsSearchHacking
  45. Hackfests/dotNET2014
  46. HjälpMedAnpassning
  47. Infrastructure/Archive/Apprentices
  48. Infrastructure/Archive/Servers/label
  49. Internships/2018/Projects/USB-Protection
  50. MarketingBrief2009
  51. Outreach/SummerOfCode/2013/Projects/SindhuS_ImplementingAdvancedGitOperationsInGitg
  52. OutreachProgramForWomen/2013/JuneSeptember
  53. OutreachProgramForWomen/Meetings/20130221
  54. Projects/GnomeShell/DesignerPlayground/ApplicationsUnnecessary
  55. Projects/Grilo
  56. Projects/HardwareTesting/Hardware
  57. Projects/Rygel/IOP
  58. Projects/Vala/Documentation
  59. ThreePointZero/LaunchParty/Philippines/Manila
  60. VikramDhillon/Sandbox/first_topic_page
  61. WhyWikiWorks
  62. КакОриентироваться
  63. ЧомуВікіПрацює
  64. フロントページ
  65. 帮助-宏
  66. 說明/巨集

<<FullSearchCached(text)>>


Lavora come la macro FullSearch ma crea una cache statica dei risultati. Utilizzarla se si preferisce cercare velocemente su un risultato aggiornato

  1. Accessibility/Documentation/GNOME2
  2. Accessibility/PythonPoweredAccessibility
  3. AiutoSuMacro
  4. Apps/Builder
  5. Apps/Builder/Features
  6. Apps/GTG/pubsub-server
  7. Apps/Games/Documentation
  8. Apps/Games/Features
  9. Attic/FootNotes
  10. Attic/GnomePowerManager/FAQ
  11. Attic/GtkLove/PatchTriaging/Issue6
  12. Attic/GtkLove/PatchTriaging/Issue7
  13. Attic/GtkLove/PatchTriaging/Issue8
  14. Attic/ScratchPad/TheAssistant
  15. BastienNocera/KernelWishlist
  16. BastienNocera/Ondav975w
  17. DaniloSegan
  18. Design/Playground/Games/Metadata
  19. Diversity/CoCWorkingGroup/Resources/CoCs/Review
  20. DocumentationProject/Planning/DeveloperDocs_2010_ideas
  21. Engagement/AnnualReport/2015/Hackfests
  22. Engagement/TeamMeetings/11-AUG-2015 (GUADEC BoF)
  23. Events/Brussels2006
  24. FoundationBoard/Minutes/20090703
  25. FoundationBoard/Minutes/20170207
  26. FoundationBoard/Minutes/20170214
  27. FoundationBoard/Minutes/20170221
  28. FoundationBoard/Minutes/20170228
  29. FoundationBoard/Minutes/20170307
  30. FoundationBoard/Minutes/20170314
  31. FoundationBoard/Minutes/20170328
  32. FoundationBoard/Minutes/20170404
  33. FoundationBoard/Minutes/20170411
  34. FoundationBoard/Minutes/20170418
  35. FoundationBoard/Minutes/20201109
  36. FoundationBoard/Minutes/20201216
  37. GUADEC/2006/PrintedContent/CoreAbst
  38. GUADEC2007/Booklet/sessionsAbst
  39. GnomeWeb/CmsRequirements
  40. GnomeWeb/CmsRequirements/DrupalEval
  41. GnomeWeb/CmsRequirements/MidgardEval
  42. GnomeWeb/CmsRequirements/PloneEval
  43. GnomeWeb/GuadecNotes
  44. Hackfests/IMContacts Social2011/Tasks/ContactsSearchHacking
  45. Hackfests/dotNET2014
  46. HjälpMedAnpassning
  47. Infrastructure/Archive/Apprentices
  48. Infrastructure/Archive/Servers/label
  49. Internships/2018/Projects/USB-Protection
  50. MarketingBrief2009
  51. Outreach/SummerOfCode/2013/Projects/SindhuS_ImplementingAdvancedGitOperationsInGitg
  52. OutreachProgramForWomen/2013/JuneSeptember
  53. OutreachProgramForWomen/Meetings/20130221
  54. Projects/GnomeShell/DesignerPlayground/ApplicationsUnnecessary
  55. Projects/Grilo
  56. Projects/HardwareTesting/Hardware
  57. Projects/Rygel/IOP
  58. Projects/Vala/Documentation
  59. ThreePointZero/LaunchParty/Philippines/Manila
  60. VikramDhillon/Sandbox/first_topic_page
  61. WhyWikiWorks
  62. КакОриентироваться
  63. ЧомуВікіПрацює
  64. フロントページ
  65. 帮助-宏
  66. 說明/巨集

<<GoTo>>


Vai direttamente alla pagina indicata

Consultare CercaPagina

<<PageList(Help)>>


Elenca le pagine il cui titolo corrisponde al termine ricercato

Consultare AiutoIndice

Macro


Descrizione

Esempio

<<RecentChanges>>


Elenco di pagine modificate di recente

Consultare ModificheRecenti

<<TitleIndex>>


Indice di tutti i titoli delle pagine

Consultare IndiceDeiTitoli

<<WordIndex>>


Indice di tutte le parole nei titoli delle pagine

Consultare IndicePerParola

<<WantedPages>>


Elenco di pagine che non esistono

Consultare PagineAssenti

<<OrphanedPages>>


Elenco di pagine non referenziate da altre pagine

Consultare PagineOrfane

<<AbandonedPages>>


Elenca le pagine non modificate da più tempo

Consultare PagineAbbandonate

<<RandomPage>>


Collegamento a una pagina a caso

<<RandomPage>>

<<RandomPage(#)>>


Collegamenti a un dato numero di pagine a caso

Due pagine a caso:<<RandomPage(2)>>

<<TableOfContents([maxdepth])>>


Visualizza un indice locale, limitato a una profondità massima (maxdept)

Consultare inizio pagina

<<Anchor(anchorname)>>


Macro per inserire "ancore" in una pagina

#qui

<<Navigation(children[,maxdepth])>>


Macro che elenca tutte le pagine che discendono da una pagina

Consultare inizio pagina

<<Navigation(siblings[,maxdepth])>>


Navigazione rapida tra pagine sullo stesso livello

Consultare /MailTo

<<Navigation(slideshow)>>


Crea un collegamento per passare da modalità presentazione a quella wiki e uno per far partire la presentazione

Consultare AiutoSuPresentazione

<<Navigation(slides)>>


Mostra i collegamenti a prima/precedente/prossima/ultima slide

Consultare AiutoSuPresentazione

<<AttachInfo>>


Mostra il numero di file allegati alla pagina attuale

Consultare AiutoSuAzioni/AllegaFile

<<AttachInfo(page)>>


Mostra il numero di file allegati alla pagina indicata

Consultare AiutoSuAzioni/AllegaFile

<<AttachList(pagename,mimetype)>>


Mostra l'elenco dei file allegati

Consultare AiutoSuAzioni/AllegaFile

Informazioni di sistema

Macro


Descrizione

Esempio

<<Hits>>


a counter for page hits <<Hits([all=(False,True)][,event_type=(VIEWPAGE,SAVEPAGE)]>>

0

<<InterWiki>>


Elenco di tutti i nomi InterWiki conosciuti

InterWiki

<<SystemInfo>>


Informazioni sul wiki, sull'interprete Python e sul sistema ospite

InformazioniSulSistema

<<PageCount(exists)>>


Calcolo del numero di pagine attuali. Se viene utilizzato come argomento exists, verranno mostrate solo le pagine esistenti.

25135 pagine

<<PageSize>>


Elenca le dimensioni di tutte le pagine

Consultare PaginePerDimensione

<<StatsChart(type)>>


Mostra grafici statistici (attualmente sono definiti questi tipi: hitcounts, pagesize, useragents)

Consultare StatisticheEventi e sottopagine

<<SystemAdmin>>


Informazioni per gli amministratori del sistema

Bisogna essere superuser per utilizzare questa macro

<<EditedSystemPages>>


Elenco di tutte le pagine di sistema modificate

  1. AideAuxDébutants
  2. BadContent
  3. FindSide
  4. ForSide
  5. FrontPage
  6. HomepageImWiki
  7. HomepageTemplate
  8. HomepageVorlage
  9. HulpTemplate
  10. LocalSpellingWords
  11. OrdListe
  12. OrdRegister
  13. PageD'Accueil
  14. SidStorlek
  15. SideStørrelse
  16. SiteNavigering
  17. StartSeite
  18. SyntaxReference
  19. SökSida
  20. TilfældigSide
  21. TitelIndex
  22. TitelListe
  23. TitelRegister
  24. VerwaisteSeiten
  25. WegWeiser
  26. WikiSandBox
  27. WortIndex
  28. ZufallsSeite
  29. ÖnskadeSidor
  30. ÖvergivnaSidor
  31. ØnskedeSider
  32. ШаблонКатегорій
  33. 類別模板

<<WikiConfig>>


Mostra al super-utente le impostazioni della configurazione del wiki diverse dalle quelle predefinite

È necessario essere super-utente per utilizzare questa macro
<<WikiConfig>>

<<WikiConfigHelp>>


Mostra la descrizione di tutti i parametri di configurazione

<<WikiConfigHelp>>

Altre

Macro


Descrizione

Esempio

<<Action(action [,text])>>


Collega una pagina con un'azione valida, il testo opzionale può essere utilizzato come alias (i nomi delle azioni fanno distinzione tra maiuscole e minuscole)

<<Action(print, Stampa questa pagina)>>, Stampa questa pagina

<<Icon(image)>>


Mostra icone di sistema

Consultare AiutoSuNavigazione

<<BR>>


Forza un a capo

Prima riga
seconda riga

<<RandomQuote(pagename)>>


Seleziona una parte di testo a caso della pagina indicata o da BiscottiDellaFortuna se questa viene omessa

Suggerimento: per ricevere notifiche via email riguardo i cambiamenti di questa pagina, fai clic su Subscribe.

<<Include(HelloWorld[,"heading"[,level]])>>


Include i conenuti di un'altra pagina

Per dettagli consultare /Includi

<<FootNote(text)>>


Aggiunge una nota a fondo pagina1 oppure mostra tutte le note a piè di pagina se non viene fornito un argomento

Consultare l'esempio a fine pagina

<<Date(timestamp)>>


Mostra la data come da impostazioni di sistema

2024-04-27

<<DateTime(timestamp)>>


Mostra data e ora2 come da impostazioni utente

2024-04-27 17:21:56

<<GetText(text)>>


Carica le traduzioni I18N (per utilizzi su pagine di Aiuto)

"EditText" viene tradotto in "EditText"

<<GetText2(,message,argument1,argument2,...)>>


Carica le traduzioni I18N (per utilizzi su pagine di aiuto o su pagine wiki con output generato) e sostituisce %s nel messaggio a seconda degli argomenti. Il primo carattere dell'argomento è utilizzato come separatore (in questo esempio: una virgola). Si può evitare il separatore utilizzando una barra rovescia.

"<<GetText2(,[You may not read %s],FooBar)>>" diventa "[You may not read FooBar]"

<<TeudView>>


Utile per wiki di sviluppo su intranet, per visualizzare documentazione pydoc formattata con un foglio di stile XSLT

Vedi http://twistedmatrix.com/wiki/python/TeudProject

<<MailTo(email)>>


Protegge il tuo indirizzo email dagli spam bot

Per dettagli vedi /MailTo

<<NewPage(PageTemplate,ButtonLabel,[ParentPage,@ME,@SELF] [,NameTemplate])>>


Permette agli utenti di creare con facilità (sotto-) pagine, usando la pagina PageTemplate come modello per una nuova pagina e la stringa NameTemplate come maschera per il nome.3 @ME viene utilizzato se si vuole creare la pagina come sotto pagina della pagina personale. @SELF viene utilizzato per creare una sotto pagina sotto la pagina dalla quale viene invocata la macro.

<<GetVal(NeatSnippets,regards)>>


Restituisce il corrispondente trovato nelle pagine dizionario.

Nel caso esistesse una pagina GermanDict contenente la voce Test, dovresti vederne la traduzione qui:

 <<MonthCalendar(,,12)>>


Mostra un calendario e crea i collegamenti per ogni giorno in sottopagine

Vedi /CalendarioMensile

  1. Il testo non può contenere alcuna formattazione wiki (1)

  2. "timestamp" può essere vuoto (ora attuale), un numero di secondi dal 1970 (unix timestamp) o una specifica temporale W3C ("2002-01-23T12:34:56"). Vedi RFC822, sez. 5. (2)

  3. NameTemplate viene formattato come time.strftime(), con l'eccezzione che %s viene sostituito da quanto inserito nel riquadro di modifica (che viene mostrato solo se richiesto). Se NameTemplate non viene specificato o è vuoto, viene sostituito in modo predefinito con %s. (3)

Scrivere una macro

Creare un file python di nome NomeMacro.py nella directory data/plugin/macro. Assicurarsi che abbia una sola funzione chiamata macro_NomeMacro(macro, arg1, arg2, ...) che ne costituisce il punto iniziale.

  • il primo argomento, macro, è un'istanza della classe Macro e viene valorizzata in una stringa col nomemacro

  • gli argomenti arg1, arg2, ... sono gli argomenti forniti dall'utente, ma ci sono dei casi particolari (consultare sotto)

È possibile accedere all'oggetto request usando macro.request, per esempio per accedere ai parametri di un modulo e ad altre informazioni dell'utente.

La funzione dovrebbe usare il formattatore per costruire un markup valido per il tipo di pagina. Nella maggior parte dei casi è HTML, quindi creare una macro che ritorna HTML funzionerà quasi sempre a parte quando sono richiesti formati come XML o plain/text (è possibile usare macro.formatter per accedere al formattatore corrente).

Per esempio, la propria pagina wiki contiene le seguenti righe:

<<NomeMacro(True, 1.7772, 17)>>

È possibile creare un file NomeMacro.py in questo modo:

   1 from wikiutil import get_unicode, get_bool, get_int, get_float
   2 
   3 Dependencies = []
   4 generates_headings = False
   5 
   6 def macro_NomeMacro(macro, arg1, arg2, arg3=7):
   7     # gli argomenti possono essere None o un oggetto unicode
   8 
   9     arg1 = get_bool(macro.request, arg1)
  10     arg2 = get_float(macro.request, arg2)
  11     # dato che arg3 ha un valore predefinito di 7, è sempre un int long
  12 
  13     return macro.formatter.text("gli argomenti sono: %s %2.3f %d" % (arg1, arg2, arg3))
  • /!\ Aggiungere una voce in Dependencies se l'output della macro non deve rimanere nella cache. Questo è importante nel caso in cui l'output della macro possa cambiare, per esempio se la macro effettua una ricerca su pagine wiki che possono essere state modificate da altri utenti o carica informazioni da un database esterno il cui contenuto può cambiare. In questo caso il valore di ogni voce non ha importanza e può essere considerato una descrizione abbreviata del "perché i risultati di questa macro non devono restare in cache". Controllare in altre macro per trovare casi più interessanti.

Se la macro è in grado di generare titoli (chiamando macro.formatter.heading()), impostare generates_headings a True per consentire alla macro TableOfContents di analizzare la propria macro alla ricerca dei titoli da usare.

Argomenti della macro

Gli argomenti passati alla macro sono normalmente istanze unicode di None se l'utente non ha fornito alcun valore.

Considerare questo esempio:

   1 def macro_Example(macro, arg1, arg2):
   2   ...

e il codice wiki (coi risultati)

 1. <<Example()>>            - passa None, None
 2. <<Example(a,b)>>         - passa u'a', u'b'
 3. <<Example(,)>>           - passa None, None
 4. <<Example("",)>>         - passa u'', None

Valori predefiniti

Se la macro dichiara dei valori predefiniti come in questo esempio:

   1 def macro_Example(macro, arg1=7, arg2=2.1):
   2   ...

Gli argomenti possono quindi essere saltati e vengono convertiti automaticamente al valore predefinito:

 1. <<Example()>>            - passa 7, 2.1
 2. <<Example(,3)>>          - passa 7, 3.0
 3. <<Example(2)>>           - passa 2, 2.1
 4. <<Example(a,7.54)>>      - errore, "a" non è un intero

Inoltre, è possibile dichiarare il tipo che si vuole ottenere:

def macro_Example(macro, arg1=int, arg2=float):
  ...

In questo modo l'utente è obbligato a inserire il parametro corretto, ma è possibile evitare questo passando un argomento vuoto nel cui caso la macro riceverà il valore None:

 1. <<Example()>>            - passa None, None
 2. <<Example(a, 2.2)>>      - errore, "a" non è un intero
 3. <<Example(7, 2.2)>>      - passa 7, 2.2
 4. <<Example(, 3.14)>>      - passa None, 3.14

Argomenti unità

Se la propria macro dichiara degli argomenti con unità, le stesse sono richieste:

   1 from MoinMoin import wikiutil
   2 def macro_Example(macro, arg1=wikiutil.UnitArgument(None, float, ['px', '%'], defaultunit='px')):
   3     if arg1:
   4         if arg1[1] == 'px':
   5             arg1 = '%dpx' % int(arg1[0])
   6         else:
   7             arg1 = '%g%s' % arg1
   8     return macro.formatter.text("argument is: %s" % (arg1))

Il valore di defaultunit, px, è utilizzato se l'utente non ne inserisce uno e deve inserire le unità valide come "px" o "%".

 1. <<Example()>>             - argomento è: None
 2. <<Example(100)>>          - argomento è: 100px
 3. <<Example(100mm)>>        - <<Example: Invalid unit in value 100mm (allowed units: px, %)>>
 4. <<Example(100px)>>        - argomento è: 100px

Scelte

Se la propria macro può accettare diverse scelte, è possibile dichiararlo come segue:

   1 def macro_Example(macro, fruit=(u'apple', u'orange')):
   2   ...

Questo richiede che l'utente inserisca una qualsiasi delle scelte fornite e utilizza la prima nel caso non ne sia fornita alcuna:

 1. <<Example(apple)>>       - passa u'apple'
 2. <<Example(OrAnGe)>>      - errore, indica all'utente quali scelte sono valide
 3. <<Example()>>            - passa u'apple'

Argomenti richiesti

Se devono essere richiesti degli argomenti, è possibile indicarlo usando la classe required_arg istanziata ottenendo il tipo dell'argomento:

from MoinMoin.wikiutil import required_arg

def macro_Example(macro, arg1=required_arg(int)):
  ...

Questo richiede che l'utente inserisca l'argomento:

 1. <<Example()>>            - errore, argomento "arg1" richiesto
 2. <<Example(4.3)>>         - errore, "4.3" non è un intero
 3. <<Example(5)>>           - passa 5

Argomenti chiave

Se la propria macro deve accettare degli argomenti arbitrati sotto forma di chiavi da passare a qualcos'altro, deve dichiarare un parametro _kwargs con valore predefinito un dizionario vuoto:

   1 def macro_Example(macro, _kwargs={}):
   2   ...

Questo fa in modo che l'utente posso passare qualsiasi valore, anche stringhe unicode arbitrarie:

 1. <<Example(äöü=7)>>       - passa il dizionario {u'äöü': u'7'}
 2. <<Example(=7)>>          - passa il dizionario {u'': u'7'}
 3. <<Example(a=1,"d e"=3)>> - passa il dizionario {u'a': u'1', u'd e': u'3'}
 4. <<Example(a)>>           - errore, troppi argomenti non-chiave

Argomenti di coda

Gli argomenti di coda consento alla propria macro di accettare un qualsiasi numero di argomenti posizionale o consentono di gestire la sintassi di macro come:

[[Macro(1, 2, 3, name=value, name2=value2, someflag, anotherflag)]].

Per poter gestire tutto questo, dichiarare un parametro _trailing_args con un elenco vuoto come valore predefinito:

   1 def macro_Example(macro, i1, i2, i3, name, name2, _trailing_args=[]):
   2   ...

Inoltre, quando l'utente fornisce troppi argomenti, questi sono inseriti in _trailing_args:

 1. <<Example(1, 2, 3, name=test, name2=test2, flag1)>>   - valido, passa u'flag1' in _trailing_args
 2. <<Example(1, 2, 3, test, test2, flag1)>>              - idem

È possibile usare questa caratteristica assieme al parametro _kwargs.