LimeSurvey Manual
Menu
Navigation
Main page
Recent changes
Random page
Help
Search
Special pages
Printable version
Recent changes
Help
English
Log in
Actions
Translate
Language statistics
Message group statistics
Export
Special
Export translations
Settings
Group
Activating a survey
Adding answers or subquestions
Administering LimeSurvey
Alternatives to the LimeSurvey import function
Assessments
Backup entire database
Batch deletion
Category:Advanced Question Settings
Category:General Question Options
Category:Question Settings
Central Participant Database
Changing an active survey
Check data integrity
Check question logic
Check survey logic - Advanced
Closing a survey
ComfortUpdate
Copy question
Data encryption
Data entry
Data policy settings
DateFunctions
Default answers
Delete question
Delete survey
Display/Export survey
Edit question
Email bounce tracking system
Email templates
Export question
Export responses
Exporting results
Expression Manager
Expression Manager sample surveys
ExpressionScript - Presentation
ExpressionScript Engine - Quick start guide
ExpressionScript examples
ExpressionScript How-tos
ExpressionScript sample surveys
Extension compatibility
Failed email notifications
First login - your user preferences
General FAQ
General settings
Getting started
Global settings
Google API howto
Home page settings
How to design a good survey (guide)
Import responses
Importing a survey
Installation - LimeSurvey CE
Installation FAQ
Installation of the LimeSurvey XAMPP package
Installation security hints
Installation using a command line interface (CLI)
Installation Version 1.92 or older
Iterate survey
Label sets
LDAP settings
License
LimeSurvey Manual
LimeSurvey PRO vs LimeSurvey CE
LimeSurvey Users
LimeSurvey Video-Tutorial
LimeSurvey-compatible hosting companies
List question groups
List questions
Localization
Major version upgrade
Make your plugin compatible with LS4
Manage user groups
Manage users
Menu configuration
Menu entries configuration
Multilingual survey
New Template System in LS3.x
Not categorized and advanced features
Notifications & data
Optional settings
Overview
Panel integration
Participant settings
Plugin manager
Plugin menu
Plugins - advanced
Presentation
Preview function
Problems & solutions
Publication & access
QS:Allowed filetypes
QS:Alphasort
QS:Answer width
QS:Array filter
QS:Array filter exclude
QS:Array filter style
QS:Assessment value
QS:Autocheck exclusive option
QS:Category separator
QS:Chart type
QS:Choice column width
QS:Choice header
QS:Code filter
QS:Commented checkbox
QS:CSS Class
QS:Date max
QS:Date min
QS:Date time format
QS:Display chart
QS:Display columns
QS:Display map
QS:Display rows
QS:Display type
QS:Dropdown dates
QS:Dropdown dates year max
QS:Dropdown dates year min
QS:Dropdown prefix
QS:Dropdown prepostfix
QS:Dropdown separators
QS:Dropdown size
QS:Dualscale headerA
QS:Dualscale headerB
QS:Em validation q
QS:Em validation q tip
QS:Em validation sq
QS:Em validation sq tip
QS:Encryption
QS:Equals num value
QS:Equation
QS:Exclusive option
QS:Get order previous q
QS:Hidden
QS:Hide tip
QS:Input box size
QS:Input boxes
QS:Input max characters
QS:Label column width
QS:Location city
QS:Location country
QS:Location defaultcoordinates
QS:Location mapheight
QS:Location mapservice
QS:Location mapwidth
QS:Location mapzoom
QS:Location nodefaultfromip
QS:Location postal
QS:Location state
QS:Mandatory
QS:Max answers
QS:Max filesize
QS:Max num value
QS:Max num value n
QS:Max num value sgqa
QS:Max subquestions
QS:Maximum chars
QS:Maximum number of files
QS:Min answers
QS:Min num value
QS:Min num value n
QS:Minimum number of files
QS:Minute step interval
QS:Month display style
QS:Multiflexible checkbox
QS:Multiflexible max
QS:Multiflexible min
QS:Multiflexible step
QS:Num value int only
QS:Numbers only
QS:Other
QS:Other comment mandatory
QS:Other numbers only
QS:Other Position
QS:Other replace text
QS:Page break
QS:Prefix
QS:Preg validation
QS:Printable survey relevance help
QS:Public statistics
QS:Question theme
QS:Random group
QS:Random order
QS:Rank header
QS:Relevance
QS:Remove text or uncheck checkbox
QS:Repeat headers
QS:Reverse
QS:Samechoiceheight
QS:Samelistheight
QS:Scale export
QS:Show comment
QS:Show grand total
QS:Show title
QS:Show totals
QS:Showpopups
QS:Slider accuracy
QS:Slider default
QS:Slider handle shape
QS:Slider handle Unicode shape
QS:Slider initial value
QS:Slider layout
QS:Slider max
QS:Slider middlestart
QS:Slider min
QS:Slider orientation
QS:Slider rating
QS:Slider reset
QS:Slider reverse
QS:Slider separator
QS:Slider showminmax
QS:Subquestion width
QS:Suffix
QS:Text input width
QS:Theme editor - advanced options
QS:Time limit
QS:Time limit action
QS:Time limit countdown message
QS:Time limit disable next
QS:Time limit disable prev
QS:Time limit message
QS:Time limit message delay
QS:Time limit message style
QS:Time limit timer style
QS:Time limit warning
QS:Time limit warning display time
QS:Time limit warning message
QS:Time limit warning style
QS:Use dropdown
QS:Value range allows missing
Question groups - introduction
Question toolbar options
Question type - 5 point choice
Question type - Array
Question type - Array (10 point choice)
Question type - Array (5 point choice)
Question type - Array (Increase-Same-Decrease)
Question type - Array (Numbers)
Question type - Array (Texts)
Question type - Array (Yes-No-Uncertain)
Question type - Array by column
Question type - Array dual scale
Question type - Date
Question type - Equation
Question type - File upload
Question type - Gender
Question type - Huge free text
Question type - Language switch
Question type - List (Dropdown)
Question type - List (Radio)
Question type - List with comment
Question type - Long free text
Question type - Multiple choice
Question type - Multiple choice with comments
Question type - Multiple numerical input
Question type - Multiple short text
Question type - Numerical input
Question type - Ranking
Question type - Short free text
Question type - Text display
Question type - Yes-No
Question types
Questions - introduction
QueXML PDF Export
Quick start guide - LimeSurvey 2.50+
Quick start guide - LimeSurvey 3.0+
Quick-translation
Regenerate question codes
Reorder questions and question groups
Reset conditions
Resources
Responses & statistics
Responses (survey results)
Running a survey safely
Setting conditions
SGQA identifier
Statistics
Survey group permissions
Survey menu
Survey participants
Survey permissions
Survey quotas
Survey settings
Survey settings version 2
Survey structure
Survey toolbar options
Surveys - introduction
Surveys - management
Tab Separated Value survey structure
Template:Deprecated
Template:DeprecatedIn
Template:Example
Template:FeatureChange
Template:FeatureStarting
Template:Hint
Template:NewIn
Template:UpdatedIn
Testing a survey
Text elements
Theme editor
Theme options
Themes
Timing statistics
Tools
Transferring an installation
Translating LimeSurvey
Troubleshooting
TwoFactorAdminLogin
Upgrading from a previous version
URL fields
Using regular expressions
Version change log
Version guide
View saved but not submitted responses
Workarounds
Language
aa - Afar
ab - Abkhazian
abs - Ambonese Malay
ace - Achinese
acm - Iraqi Arabic
ady - Adyghe
ady-cyrl - Adyghe (Cyrillic script)
aeb - Tunisian Arabic
aeb-arab - Tunisian Arabic (Arabic script)
aeb-latn - Tunisian Arabic (Latin script)
af - Afrikaans
aln - Gheg Albanian
alt - Southern Altai
am - Amharic
ami - Amis
an - Aragonese
ang - Old English
ann - Obolo
anp - Angika
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
atj - Atikamekw
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - South Azerbaijani
ba - Bashkir
ban - Balinese
ban-bali - Balinese (Balinese script)
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba (Latin script)
bcc - Southern Balochi
bci - Baoulé
bcl - Central Bikol
bdr - West Coast Bajau
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bew - Betawi
bg - Bulgarian
bgn - Western Balochi
bh - Bhojpuri
bho - Bhojpuri
bi - Bislama
bjn - Banjar
blk - Pa'O
bm - Bambara
bn - Bangla
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
btm - Batak Mandailing
bto - Iriga Bicolano
bug - Buginese
bxr - Russia Buriat
ca - Catalan
cbk-zam - Chavacano
cdo - Min Dong Chinese
ce - Chechen
ceb - Cebuano
ch - Chamorro
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cpx - Pu-Xian Min
cpx-hans - Pu-Xian Min (Simplified Han script)
cpx-hant - Pu-Xian Min (Traditional Han script)
cpx-latn - Pu-Xian Min (Latin script)
cr - Cree
crh - Crimean Tatar
crh-cyrl - Crimean Tatar (Cyrillic script)
crh-latn - Crimean Tatar (Latin script)
crh-ro - Crimean Tatar (Romania)
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
dag - Dagbani
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
dga - Dagaare
din - Dinka
diq - Zazaki
dsb - Lower Sorbian
dtp - Central Dusun
dty - Doteli
dv - Divehi
dz - Dzongkha
ee - Ewe
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
es-419 - Latin American Spanish
es-formal - Spanish (formal address)
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
fat - Fanti
ff - Fula
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fon - Fon
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gaa - Ga
gag - Gagauz
gan - Gan Chinese
gan-hans - Gan (Simplified)
gan-hant - Gan (Traditional)
gcr - Guianan Creole
gd - Scottish Gaelic
gl - Galician
gld - Nanai
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
gor - Gorontalo
got - Gothic
gpe - Ghanaian Pidgin
grc - Ancient Greek
gsw - Alemannic
gu - Gujarati
guc - Wayuu
gur - Frafra
guw - Gun
gv - Manx
ha - Hausa
hak - Hakka Chinese
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
hno - Northern Hindko
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
hsn - Xiang Chinese
ht - Haitian Creole
hu - Hungarian
hu-formal - Hungarian (formal address)
hy - Armenian
hyw - Western Armenian
hz - Herero
ia - Interlingua
id - Indonesian
ie - Interlingue
ig - Igbo
igl - Igala
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kai - Karekare
kbd - Kabardian
kbd-cyrl - Kabardian (Cyrillic script)
kbp - Kabiye
kcg - Tyap
kea - Kabuverdianu
kg - Kongo
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kjh - Khakas
kjp - Eastern Pwo
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
ko - Korean
ko-kp - Korean (North Korea)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
krl - Karelian
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ksw - S'gaw Karen
ku - Kurdish
ku-arab - Kurdish (Arabic script)
ku-latn - Kurdish (Latin script)
kum - Kumyk
kus - Kʋsaal
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - Lak
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lki - Laki
lld - Ladin
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mad - Madurese
mag - Magahi
mai - Maithili
map-bms - Basa Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Māori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mnc - Manchu
mnc-latn - Manchu (Latin script)
mnc-mong - Manchu (Mongolian script)
mni - Manipuri
mnw - Mon
mo - Moldovan
mos - Mossi
mr - Marathi
mrh - Mara
mrj - Western Mari
ms - Malay
ms-arab - Malay (Jawi script)
mt - Maltese
mus - Muscogee
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nāhuatl
nan - Min Nan Chinese
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
nia - Nias
niu - Niuean
nl - Dutch
nl-informal - Dutch (informal address)
nmz - Nawdm
nn - Norwegian Nynorsk
no - Norwegian
nod - Northern Thai
nog - Nogai
nov - Novial
nqo - N’Ko
nrm - Norman
nso - Northern Sotho
nv - Navajo
ny - Nyanja
nyn - Nyankole
nys - Nyungar
oc - Occitan
ojb - Northwestern Ojibwa
olo - Livvi-Karelian
om - Oromo
or - Odia
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pcm - Nigerian Pidgin
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Norfuk / Pitkern
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
pwn - Paiwan
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rki - Arakanese
rm - Romansh
rmc - Carpathian Romani
rmy - Vlax Romani
rn - Rundi
ro - Romanian
roa-tara - Tarantino
rsk - Pannonian Rusyn
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rw - Kinyarwanda
ryu - Okinawan
sa - Sanskrit
sah - Yakut
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
se-fi - Northern Sami (Finland)
se-no - Northern Sami (Norway)
se-se - Northern Sami (Sweden)
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
sh-cyrl - Serbo-Croatian (Cyrillic script)
sh-latn - Serbo-Croatian (Latin script)
shi - Tachelhit
shi-latn - Tachelhit (Latin script)
shi-tfng - Tachelhit (Tifinagh script)
shn - Shan
shy - Shawiya
shy-latn - Shawiya (Latin script)
si - Sinhala
simple - Simple English
sjd - Kildin Sami
sje - Pite Sami
sk - Slovak
skr - Saraiki
skr-arab - Saraiki (Arabic script)
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
smn - Inari Sami
sms - Skolt Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
sro - Campidanese Sardinian
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
sty - Siberian Tatar
su - Sundanese
sv - Swedish
sw - Swahili
syl - Sylheti
szl - Silesian
szy - Sakizaya
ta - Tamil
tay - Tayal
tcy - Tulu
tdd - Tai Nuea
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tk - Turkmen
tl - Tagalog
tly - Talysh
tly-cyrl - Talysh (Cyrillic script)
tn - Tswana
to - Tongan
tok - Toki Pona
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
trv - Taroko
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - Uzbek (Cyrillic script)
uz-latn - Uzbek (Latin script)
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vmw - Makhuwa
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
wal - Wolaytta
war - Waray
wls - Wallisian
wo - Wolof
wuu - Wu Chinese
wuu-hans - Wu Chinese (Simplified)
wuu-hant - Wu Chinese (Traditional)
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
xsy - Saisiyat
yi - Yiddish
yo - Yoruba
yrl - Nheengatu
yue - Cantonese
yue-hans - Cantonese (Simplified)
yue-hant - Cantonese (Traditional)
za - Zhuang
zea - Zeelandic
zgh - Standard Moroccan Tamazight
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - Chinese (Macau)
zh-my - Chinese (Malaysia)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
Format
Export for off-line translation
Export in native format
Export in CSV format
Fetch
{{DISPLAYTITLE:Nuovo sistema di template in LS3.x}}<languages /> __TOC__ =Introduzione= Attenzione: nelle versioni precedenti di LimeSurvey i file che definiscono l'aspetto del sondaggio, come viene presentato il sondaggio in termini di colori, caratteri, layout e (alcuni) comportamenti, erano chiamati "template". A causa di nuovi approfondimenti, questo è ora chiamato "tema", mentre il modello è riservato ai sondaggi di esempio. In questa pagina imparerai a: * Usa il nuovo sistema di temi di LimeSurvey 3.0. * Usa l'ereditarietà per gestire i tuoi temi. * Aggiungi un'immagine al tuo tema * Gestisci le opzioni del tema per i tuoi sondaggi e gruppi di sondaggi <hr/> LimeSurvey 3 introduce un sistema di motore tematico completamente nuovo, basato su Twig 1.29, Bootstrap e che consente l'ereditarietà del tema e le opzioni del tema. Rimuove completamente il vecchio sistema di parole chiave sostitutive. Quindi ora, il 100% dell'HTML di frontend può essere personalizzato. Ad esempio, nel vecchio sistema dei temi, c'era una parola chiave {ASSESSMENTS} che veniva sostituita dall'HTML di valutazione al momento dell'esecuzione. Un progettista di temi non aveva modo di personalizzare questo codice HTML (oltre all'utilizzo di JavaScript). Ora, c'è un file chiamato assessment.twig che contiene la logica (scritta in Twig) per generare questo HTML. In queste pagine vi daremo alcune spiegazioni su come utilizzare questo nuovo motore di temi. <div class="simplebox">[[File:help.png]] Non descriveremo in dettaglio come funziona Twig. Si tratta di una specie di PHP molto semplificato che offre un alto livello di sicurezza grazie al sistema “sandbox” (lo vedremo più in dettaglio nella parte relativa al codice Theme Engine Core). Se conosci già PHP, sarà estremamente facile per te padroneggiarlo. Se non conosci PHP, dovrebbe comunque essere abbastanza facile da imparare. Per favore, dai un'occhiata alla documentazione di Twig 1.X: https://twig.symfony.com/</div> =Modifica utilizzando l'interfaccia di amministrazione= ==elenco dei temi== Nella dashboard dell'amministratore, ora c'è una casella per accedere all'elenco dei temi: [[File:Template list.jpg|thumb|800px |center|baseline|border|''L'elenco dei temi dopo una nuova installazione di RC3'']] <br /> L'elenco è diviso in 5 colonne: * un'anteprima del tema: è solo un file immagine chiamato “preview.png” alla radice del tema * il “titolo” del tema come specificato nel manifest (config.xml nella root del tema) * la descrizione del tema: una stringa impostata nel suo manifest * il tipo di tema: Core theme (fornito con LimeSurvey), User theme (aggiunto nella directory di caricamento), tema XML (non caricato nel database) * Estende: se il tema estende un altro tema, il suo nome verrà indicato qui * Alcuni pulsanti di azione: ** Installa: it caricherà il manifest di un tema per aggiungerlo al database e renderlo disponibile per la selezione a livello di sondaggio ** Disinstalla: cancellerà le voci di configurazione di un tema nel database ** Editor del tema: it ti reindirizzerà all'editor del tema ** Opzione tema: ti condurrà alla configurazione globale delle opzioni del tema ==Editor dei temi== <div class="simplebox"> [[File:help.png]] Questa documentazione presuppone che tu sappia già come utilizzare l'editor dei temi nella versione precedente di LS.</div> <br> L'editor dei temi è stato mantenuto il più vicino possibile a quello originale. Quindi, quando apri un tema principale, non puoi modificarlo. Ma ora, invece di un pulsante "copia", hai un "pulsante estendi". <br> [[File:Extends default.png|center|baseline|border|''Ora '''estendi''' il tema'']] <span id="A_quick_overview_of_the_concept_of_theme_inheritance"></span> ====Una rapida panoramica del concetto di ereditarietà del tema==== In LS3, un tema può ora ereditare da un altro tema, può "estendere" un altro tema. Questo significa che la cartella del tema sarà praticamente vuota, conterrà solo i file (viste, fogli di stile, script, risorse ecc.) diversi da quelli originali. In questo modo, sarà facile per te creare una flotta di temi per i tuoi diversi utenti senza dover mantenere molti temi diversi. Ad esempio: puoi avere il tuo tema fatto in casa, e poi una versione per un'azienda (con il suo logo, il suo stile, magari un link al suo sito web nel piè di pagina ecc.), un'altra versione per un'altra azienda ecc. Se allora aggiorni il CSS o il layout globale del tuo tema personalizzato, tutti i temi che ne ereditano verranno aggiornati automaticamente. Si noti che l'ereditarietà è ricorsiva: un tema può estendere un tema che ne estende un altro ecc. <div class="simplebox">[[File:help.png]] Significa anche che se estendi uno dei temi principali di LimeSurvey, beneficerai comunque dei suoi aggiornamenti.</div> <span id="Novelties_in_the_user_interface"></span> ====Novità nell'interfaccia utente==== Per estendere il tema Monochrome di LimeSurvey, vai all'elenco dei temi, fai clic sul pulsante "Editor dei temi" del tema Monochrome. Quindi, fai clic su "estende" e convalida il nuovo nome "estende_monocromatico". Se ora vai nella directory di caricamento (con il tuo client file/ftp), vedrai che è stata creata una nuova directory: '''upload/themes/extends_monochrome''' Contiene un file XML e directory , ma la maggior parte delle directory sono vuote. Non ha né visualizzazioni né CSS né JS. Tuttavia, puoi comunque selezionare questo tema come normale da un sondaggio e sembrerà esattamente come il tema monocromatico. [[File:Extends monocromatico empty.jpg|center|baseline|border|''L'albero del tema (directory e file) subito dopo la sua creazione. È praticamente vuoto'']] <div class="simplebox">[[File:help.png]] Le risorse (jpg, png ecc.) dal tema originale vengono copiate quando si estende un tema. Questo perché se copi localmente un file CSS dal tema originale e se fa riferimento a quei file (come nell'istruzione background-image), sarà necessario trovare quelle immagini nel percorso del tema corrente.</div> L'editor del tema per il tema extends_monochrome ha questo aspetto: [[File:Editing extends monochrome.jpg|center|baseline|border|'' Editing extends_monochrome theme'']] <br /><br /> Non c'è una grande differenza con il vecchio editor di temi. Elenchiamo le principali: <br /> * La parola chiave '''ereditato''' nell'elenco dei file. Significa che il file non è presente nella directory del tema e che verrà utilizzato il file del tema originale. [[File:Inherited.jpg|center]] <br> * L'editor principale ( [https://ace.c9.io ACE editor ] ) mostra il contenuto del file selezionato. I file non contengono solo HTML, CSS o JS, ma anche istruzioni Twig. Quelle affermazioni di Twig ci danno la possibilità di applicare un po' di logica alle visualizzazioni dei temi che prima si trovavano in profondità nel nucleo, e che ora possono essere personalizzate. [[File:Twig code in editor.jpg|center|''Some twig codice, per Elenco dei sondaggi'']] <br> * Questo è il motivo per cui ora sono disponibili più tipi di schermo nel selettore a discesa del menu in alto. Noterai pagine come 'Elenco sondaggi', 'Carica', 'Salva', 'Errore', 'Registrazione', 'Valutazioni', 'Stampa risposte' che prima non erano disponibili o che non potevi davvero essere personalizzato prima. [[File:Newscreens editables.jpg|195px|center|''Ora puoi personalizzare tutti gli schermi'']] <br /> * Il link 'tip' in fondo all'elenco dei file ti offre il modo Twig per aggiungere un'immagine nel tuo codice HTML [[File:Tip picture.png|605px|center]] <br /> * Il pulsante 'salva modifiche' diventa un pulsante '''Copia nel tema locale e salva le modifiche''' [[File:Copytolocal.png|360px|center]] <span id="Quick_example:_adding_a_picture"></span> ====Esempio rapido: aggiunta di un'immagine ==== Il pulsante '''Copia in tema locale e salva modifiche''' farà esattamente quello che dice: se modifichi qualcosa all'interno del file e poi fai clic su quel pulsante, copierà il file nel tema che stai modificando, e salvare le modifiche. <br> Ad esempio: fai clic sul file layout_global.twig, quindi appena prima del contenuto del blocco ( {% block content %}) aggiungi il testo "TEST" e fai clic sul pulsante. Puoi vedere che l'etichetta del file è cambiata da "ereditato" a "locale" e ora il pulsante è un semplice pulsante '''salva modifiche'''. [[File:After edition.png|center|''subito dopo aver fatto clic sul pulsante'']] <br> Se apri un file explorer e vai nella directory upload/themes/extends_monochrome/views/, vedrai che contiene un solo file, il file layout_global.twig e che c'è la stringa “TEST”.!N ![[File:Albero con layout global arrow.png|center|''Ora il file è presente nel tuo tema'']] <br><br> Ora invece di aggiungere un testo a caso, aggiungeremo un'immagine. Se fai clic sul link del suggerimento, ti dirà: <br> Per utilizzare un'immagine in un file .twig: '''{{ image('./files/myfile.png', 'alt-text for my file', {"class": "myclass" }) }}''' <br> Se hai letto la documentazione di Twig (e avresti dovuto farlo a questo punto), sai che '''{{ function( ) }}<nowiki /> ''' farà eco al risultato di una funzione sullo schermo. Qui la funzione è image( ). <div class="simplebox">[[File:help.png]] Se sei curioso di sapere cosa fa, puoi trovarlo nel codice qui (versione di RC3): [https://github.com/LimeSurvey/LimeSurvey/blob/f3737a75e428f604d68d2e5ba958f3eba3eba2e1 /application/core/LS_Twig_Extension.php#L219-L237 funzione image() in RC3] Se non capisci il codice: non preoccuparti, non è necessario sapere come funziona, ma perché usalo e come usarlo. </div> <br> Dovresti usare la funzione image() per due motivi: * La funzione image scorre il tema per trovare l'immagine. Se il tema su cui stai lavorando viene esteso a un altro tema e se copi il file nel punto in cui hai inserito l'immagine localmente, ma quell'immagine non viene copiata nel tema locale, eseguirà un ciclo nell'albero di ereditarietà del tema per trovare dove quell'immagine è. * Utilizzerà l'asset manager, quindi migliorerà le prestazioni del tuo tema. Consulta la documentazione di Yii Asset Manager per ulteriori informazioni a riguardo: http://www.yiiframework.com/wiki/148/understanding-assets/ <div class="simplebox"> Quindi, per aggiungere un'immagine al tuo tema: * basta caricarla come al solito con l'uploader di file sulla destra e poi aggiungerla dove vuoi in qualsiasi file twig: '''{ { image('./files/myfile.png') }}''' * Se vuoi aggiungere un testo alternativo per la tua immagine (per screen reader e validazione HTML), aggiungi: {{ image('./files/myfile.png'), ''' 'my alternative text' ' '' }} * Se vuoi aggiungere un attributo di classe e aggiungere un id ad esso: {{ image('./files/myfile.png'), 'my alternative text', ''' {“class”: “a_nice_css_class ”, “id”: “any_id”} ''' }} </div> ====Alcune cose nella nostra lista di cose da fare==== * Offri agli utenti la possibilità di caricare un file di anteprima personalizzato dall'editor stesso * Aggiungi un pulsante per eliminare il file locale e tornare alla istruzione ereditata * Copia solo l'immagine utilizzata nei file CSS (elencandoli nel manifest come file da copiare) * Ricorda quale tema si estende quello corrente (se presente) ==Opzioni del tema== Un'altra novità di LS3 è la pagina delle opzioni del tema. Come vedremo più avanti, i creatori di temi possono creare le proprie opzioni e persino la propria pagina delle opzioni di amministrazione. Qui vedremo rapidamente come funziona la pagina delle opzioni dei temi principali. Per accedere alle opzioni del tema a livello globale: fai clic su "opzioni del tema" nell'elenco dei temi ===Opzioni avanzate=== {{QS: Editor del tema - opzioni avanzate}} <span id="Simple_options"></span> ===Opzioni semplici=== La pagina delle opzioni Simple proviene dal modello stesso. È realizzato tramite un file twig e alcuni javascript all'interno della directory /options del tema: https://github.com/LimeSurvey/LimeSurvey/tree/develop/templates/default/options (collegamento interrotto) <div class="simplebox"> [[File:help.png]] Questa pagina può essere completamente diversa da un tema all'altro e i fornitori di temi sono fortemente incoraggiati a creare il proprio look & feel.</div> [[File:Options.png|pollice|750px|centro]] <br><br> La pagina delle opzioni semplici riempie semplicemente gli input del modulo avanzato. Puoi vederlo attivando o disattivando un'impostazione nella pagina semplice e vedere come il relativo input nel modulo avanzato viene modificato di conseguenza. Ad esempio, nelle opzioni semplici di Default Template, se cambi il tema Bootswatch in "Darkly" e poi fai clic sulla scheda per le opzioni avanzate (anche senza salvare) vedrai che il campo "Cssframework Css" è cambiato da {"replace": [["css/bootstrap.css","css/flatly.css"]]}<br> a<br> {"replace": [["css/bootstrap.css","css/darkly.css"]]} <br> Ecco le diverse semplici opzioni per i temi principali: *'''Modalità Ajax:''' La pagina successiva dovrebbe essere caricata tramite ajax (più veloce) o tramite ricaricamento della pagina (meglio per scopi di debug)!N !*'''Immagine di sfondo:''' se impostato su Sì, verrà caricata l'immagine denominata pattern.png (sarà sostituita da un selettore di file in Master) *'''Box container:''' se impostato a No, le domande non saranno contenute in un box (quindi si possono usare array più grandi della larghezza dello schermo) *'''Brandlogo:''' se impostato a no, il nome del sondaggio sarà mostrato nella barra in alto, altrimenti puoi selezionare una delle immagini all'interno della directory dei file da utilizzare come immagine del logo. *'''Animate body:''' se impostato su yes, puoi scegliere una delle animazioni da applicare quando viene caricato il corpo del sondaggio *'''Domanda animata:''' come per le domande *'''Allerte animate:''' come per gli avvisi *'''Bootstrap theme:''' qui puoi scegliere un tema Bootstrap da caricare. Provengono da Bootswatch https://bootswatch.com/3/ <br> La libreria utilizzata per le animazioni è animate.css: https://daneden.github.io/animate.css/ Ovviamente, un fornitore di temi potrebbe aggiungere la propria libreria di animazioni o nessuna libreria di animazioni. <div class="simplebox">[[File:help.png]] I temi monocromatici utilizzano lo stesso tema colore bootstrap dell'interfaccia utente di amministrazione. Non stanno usando il sistema di sostituzione del framework CSS, ma aggiungono semplicemente un file CSS. Quindi, illustra un altro modo per gestire i temi personalizzati per i fornitori di temi.</div> <span id="Inheritance_system"></span> ===Sistema ereditario=== Nella parte precedente, abbiamo visto che un tema può estendere un altro tema. Una configurazione del tema può anche ereditare da un'altra configurazione del tema. Significa che per un dato tema, puoi avere una configurazione a * livello globale (quello che abbiamo appena visto accessibile dall'elenco dei temi) * a livello di gruppo di indagine * un ultimo a livello di indagine. Ogni parametro a un certo livello può ereditare dal livello superiore: ereditarietà del gruppo di sondaggi. Innanzitutto, vediamo il livello del gruppo di indagine. <span id="At_survey_group_level"></span> ====A livello di gruppo di indagine==== In effetti, una delle altre grandi novità di LS3 è il sistema di gruppi di indagine. Ora puoi creare diversi gruppi per organizzare i tuoi sondaggi. Per accedervi, vai all'elenco dei sondaggi e fai clic sulla scheda del gruppo di sondaggi: [[File:Surveygroup.png|thumb|800px|center|''La scheda dei gruppi di sondaggi'']] <br> In questo elenco sono disponibili due pulsanti di azione. Se il gruppo è vuoto, puoi eliminarlo. Altrimenti, puoi sempre modificarlo. Facendo clic sul pulsante Modifica, si accede alla pagina di configurazione del gruppo di sondaggi: [[File:Surveygroupedit.png|thumb|800px|center|''Modifica del gruppo di sondaggi predefinito'']] <br> La terza scheda di questa pagina si chiama "Opzioni modello per questo gruppo di indagine". Se fai clic su di esso, vedrai lo stesso elenco di temi che nell'elenco dei temi, tranne che qui è visibile solo il pulsante di opzione (l'editor del tema può essere raggiunto solo dall'elenco principale). <br> Ora, se fai clic sull'opzione per il modello predefinito, vedrai questo: [[File:Option group inherit.png|thumb|800px|center|''In Survey Group, le opzioni del modello sono ereditate per impostazione predefinita'']] <br> * '''Eredita tutto''' significa che tutta la configurazione verrà ereditata dal livello di configurazione Globale. * Se vai alla '''pagina delle opzioni avanzate''', vedrai che tutti i campi sono impostati per ereditare. * Se clicchi su "no" per "Eredita tutto" nella opzioni semplici, vedrai di nuovo una pagina molto simile alla pagina delle opzioni globali. L'unica differenza è che per ogni campo puoi impostarlo su sì, no o ereditare; e ogni selettore a discesa ha un valore ''inherit'''. [[File:Inherit group.png|thumb|800px|center|''Ogni impostazione può avere un valore ereditato'']] <div class="simplebox">[[File:help.png]] Un gruppo di sondaggi può essere figlio di un altro gruppo. In questo caso, erediterà dal suo genitore.</div> ====A livello di sondaggio==== Quando modifichi un sondaggio, nel menu della barra di sinistra, vedrai una nuova voce "Opzioni tema". Ti condurrà alla pagina delle opzioni del tema selezionato per il sondaggio corrente. Troverai lo stesso sistema di ereditarietà del gruppo di indagine, ma questa volta ereditare significa che l'impostazione verrà ereditata dal gruppo di indagine dell'indagine. [[File:Options survey.png|thumb|800px|center|''Opzioni del tema a livello di sondaggio'']] ==Esempio di caso d'uso== Supponiamo che tu stia utilizzando un unico tema per diverse aziende (A e B). Puoi impostare le tue opzioni preferite a livello globale (ad esempio: ajax attivo, animare il corpo con una diapositiva, avvisi con un impulso). Quindi crei un gruppo di sondaggi per ogni azienda: un gruppo di sondaggi per l'azienda A che ospiterà tutti i sondaggi per questa azienda e un sondaggio per l'azienda B che ospiterà tutti i sondaggi per l'azienda B. A questo livello, imposterai solo il logo e lo sfondo e lascerai ereditare le altre opzioni. Quindi, tutti i sondaggi del gruppo A utilizzeranno il logo dell'azienda A e tutti i sondaggi del gruppo B il logo dell'azienda B. Per uno dei sondaggi dell'azienda A, potresti utilizzare uno sfondo diverso in relazione all'argomento del sondaggio: basta cambiare lo sfondo nelle opzioni a livello di sondaggio. Se qualcuno nell'azienda B ti dice che l'allerta pulsante è troppo aggressiva e preferirebbe qualcosa di più fluido come una dissolvenza in apertura, devi solo cambiare l'animazione dell'allerta al livello del gruppo di sondaggi B e tutti i sondaggi di questo gruppo ora utilizzeranno questa animazione. Se l'azienda A cambia il proprio logo, è possibile modificarlo a livello del gruppo di sondaggi A e tutti i sondaggi di questo gruppo utilizzeranno il nuovo logo. <br> <div class="simplebox"> Questi esempi si basano sulle opzioni attuali del tema principale. Ma ovviamente, se sei un fornitore di temi, o se sei in grado di scrivere un po' di script con twig, puoi aggiungere le tue opzioni. Ad esempio, potresti aggiungere un'opzione "info footer" dove puoi aggiungere dati come il sito web dell'azienda o un numero di telefono per chiedere aiuto. Quindi, se l'azienda A ha reparti diversi, con numeri di telefono diversi, puoi semplicemente creare un sottogruppo per ciascun dipartimento nel gruppo di indagine A. Ogni sottogruppo avrà il proprio numero di telefono in queste opzioni.</div> <span id="FAQ_about_theme_customization"></span> = FAQ sulla personalizzazione del tema = Qui troverai alcune risposte alle domande che sono state poste nel forum e che potrebbero aiutarti a personalizzare il tuo tema. ==Personalizzazione CSS/JS: trattare con l'asset manager ("perché le mie modifiche non vengono applicate?") == <br /> Se stai tentando di aggiornare il CSS/JS di un tema modificando direttamente il codice con il tuo editor preferito, potresti rimanere sorpreso dal fatto che le tue modifiche non vengano applicate. <br /> Dalla 2.50, LS usa il gestore patrimoniale Yii: [http://www.yiiframework.com/wiki/148/understanding-assets/ Yii Documentation about Assets] <br /> Sposta i file CSS/JS di un tema in una sottodirectory tmp/ con una stringa casuale (es: "tmp/1ef64ml/"). Quindi, se apporti modifiche a un file css/js e lo dici al gestore patrimoniale, i file vengono copiati in una nuova sottodirectory con un nuovo nome in modo che la cache del browser dell'utente venga aggiornata e vedano il nuovo css/js . Altrimenti, dovrebbero pulire la cache del browser. <br /> Qui i collegamenti CSS nell'intestazione quando il gestore patrimoniale è attivo: <br /> [[File:Risorse su vanilla.jpg]] <br /> Come puoi vedere, fanno tutti riferimento alle sottocartelle tmp/. <br /> Qui i collegamenti CSS nell'intestazione quando il gestore patrimoniale è disattivato: <br /> [[File:Asset off.png]] <br /> Come puoi vedere, puntano ai file reali del tema. <br /> <div class="simplebox">[[File:help.png]] Naturalmente, se l'Asset Manager non sa che hai modificato il file, il vecchio file della vecchia tmp/directory rimarrà invariato e le tue modifiche non verranno mai applicate..</div> Quindi, quando modifichi i CSS/JS di un tema hai diverse possibilità: *'''Puoi usare LS Theme Editor:''' si occupa dell'asset manager e non devi non preoccuparti di nulla *'''Puoi attivare la modalità di debug:''' disattiverà l'asset manager, quindi verranno chiamati i veri file css/js dei tuoi temi (ma poi dovrai aggiornare la cache del browser ad ogni caricamento) * '''Puoi aggiornare la cache degli asset''': da Impostazioni globali -> Generale -> Cancella cache degli asset [[File:Clearassets-ls3 3.png]] <div class="simplebox">[[File:help.png]] '''Utilizzare l'editor del tema per modificare il CSS personalizzato è di gran lunga la soluzione migliore.'''</div> L'utilizzo dell'editor dei temi ti aiuterà a comprendere l'architettura del nuovo motore dei temi. Inoltre, se la tua personalizzazione è fruttata, fai attenzione alla specificità dei CSS: la maggior parte delle definizioni utilizza il selettore ".fruity" (una delle classi di l'elemento del corpo) == Aggiunta di caratteri personalizzati al mio tema == === Il modo più semplice: utilizzare Google Font CDN === Bootswatch Survey Theme utilizza Google Font CDN. Diamo un'occhiata a come funziona: https://github.com/LimeSurvey/LimeSurvey/blob/70a1d99cd2ebe411597231a8bc746b4ca9e19584/themes/survey/bootswatch/css/variations/flatly.min.css <syntaxhighlight lang="css"> @import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic"); </syntaxhighlight> Quindi il carattere Lato viene utilizzato tramite le regole CSS: https://github.com/thomaspark/bootswatch/blob/master/dist/flatly/bootstrap.css#L72 <syntaxhighlight lang="css"> corpo { ... famiglia di caratteri: "Lato"; ... } </syntaxhighlight> Puoi utilizzare qualsiasi carattere Google in questo modo nel tuo tema personalizzato. Ovviamente, dovresti rimuovere il selettore di caratteri dalle opzioni del tuo tema. Elimina quelle righe in options.twig: https://github.com/LimeSurvey/LimeSurvey/blob/70a1d99cd2ebe411597231a8bc746b4ca9e19584/themes/survey/vanilla/options/options.twig#L209-L230 === Utilizzo di caratteri locali === Naturalmente, puoi anche scaricare i file dei caratteri e utilizzarli dal server locale piuttosto che da Google CDN (meglio per la privacy). Per avere un esempio di come farlo, ecco la nostra versione locale del font noto: https://github.com/LimeSurvey/LimeSurvey/blob/70a1d99cd2ebe411597231a8bc746b4ca9e19584/assets/fonts/noto.css <syntaxhighlight lang="css"> @font-face { font-family: 'Noto Sans'; font-weight: 300; font-style: normale; src: url('./font-src/Noto/NotoSans-Regular.ttf'); } ... </syntaxhighlight> Puoi utilizzare una definizione molto simile nel file css del tuo tema, quindi copiando il file NotoSans-Regular.ttf nella cartella css/font-src/ del tuo tema. Quindi, applica quel carattere al tuo corpo (o qualsiasi altro elemento) come sopra e rimuovi il selettore di caratteri dell'opzione predefinita. === Creazione del proprio selettore di font nelle opzioni === Per ora, non è possibile utilizzare facilmente il selettore di font principale per aggiungere il proprio font nelle opzioni. Dobbiamo prima dare la possibilità all'utente finale di caricare pacchetti personalizzati (vedi paragrafo successivo: Uno sguardo al Fruity Font Selector ) <br> Ecco come procedere: <br> *Aggiungi due font (my_custom_font e my_custom_other_font) nel tuo tema, utilizzando CDN o server locale *Quindi, nel tuo file css, aggiungi due nuove classi: <br> <syntaxhighlight lang="css"> .font-my_custom_font { font-family: 'my_custom_font '; } .font-my_custom_other_font { font-family: 'my_custom_other_font'; } </syntaxhighlight> *Nel file XML del tuo tema, aggiungi un'opzione font (quella predefinita sarà my_custom_font) : <syntaxhighlight lang="xml"> <options> .... <font>my_custom_font</font> </options> </syntaxhighlight> * in option.twig, aggiungi il tuo font picker aggiungendo quelle righe (non testato per ora, quindi vieni a lamentarti nel forum se non funziona): <syntaxhighlight lang="html"> <div class='row ls-space margin top-15 bottom-15 action_hide_on_inherit'> <hr/> </div> <div class='row action_hide_on_inherit'> <div class='col-sm-12'> <div class='panel panel-default'> <div class='panel-heading'> {{ "I miei caratteri personalizzati" | T }}</div> <div class='panel-body'> <div class='form-group row'> <label for='simple_edit_font' class='control-label'>{{ "Seleziona carattere:" | t }}</label> <div class='col-sm-12'> <select class='form-control selector_option_value_field' id='simple_edit_font' name='font'> {% if templateConfiguration.sid non è vuoto o templateConfiguration.gsid non è vuoto %} //Non dovrebbe essere "tema" invece di "template"? {% set fontOptions = fontOptions ~ '<option value = "inherit" > Ereditare</option> ' %} {% endif %} <optgroup label="{{ "My Custom fonts" | t }}"> <option class="font-my_custom_font" value="custom_font" data-font-package="" > Costume</option> <option class="font-my_custom_other_font" value="my_custom_other_font" data-font-package="" > Altro</option> </optgroup> </select> </div> </div> </div> </div> </div> </div> </syntaxhighlight> <br> Ora i tuoi utenti dovrebbero essere in grado di scegliere tra questi due tipi di carattere. === Uno sguardo al Fruity Font Selector === In futuro, daremo la possibilità all'utente finale di caricare i propri pacchetti di risorse, inclusi i pacchetti di font. Renderà molto facile qualsiasi personalizzazione dei caratteri. <br> Per capire i pacchetti Yii: <br> http://www.yiiframework.com/doc/api/1.1/CClientScript#packages-detail <br> <br> I pacchetti LimeSurvey sono definiti in file diversi. I pacchetti di caratteri sono definiti qui: https://github.com/LimeSurvey/LimeSurvey/blob/4c40b61afb0dba8fd80154b50f5831045df8d814/application/config/fonts.php <br> Ad esempio, il pacchetto di font Noto è definito qui: https://github.com/LimeSurvey/LimeSurvey/blob/4c40b61afb0dba8fd80154b50f5831045df8d814/application/config/fonts.php#L47-L53 <br> <syntaxhighlight lang="php"> 'font-noto' => array( 'devBaseUrl' => 'assets/fonts/', 'basePath' => 'fonts', 'css' => array( ' noto.css', ), ), </syntaxhighlight> <br> Il file noto.css che contiene è qui: https://github.com/LimeSurvey/LimeSurvey/blob/4c40b61afb0dba8fd80154b50f5831045df8d814/assets/fonts/noto.css <br> Notare la definizione della classe css ".font-noto" alla fine: <syntaxhighlight lang="css"> @font-face { font-family: 'Noto Sans'; ... } ... .font-noto{ font-family: 'Noto Sans'; } </syntaxhighlight> <br> Quindi, in Vanilla Theme, il carattere noto viene utilizzato aggiungendo il pacchetto noto e definendo l'opzione del carattere a noto: <br> https://github.com/LimeSurvey/LimeSurvey/blob/70a1d99cd2ebe411597231a8bc746b4ca9e19584/themes/survey/vanilla/config.xml#L79 <syntaxhighlight lang="xml"> <packages> .... <add> font-noto</add> </packages> </syntaxhighlight > https://github.com/LimeSurvey/LimeSurvey/blob/70a1d99cd2ebe411597231a8bc746b4ca9e19584/themes/survey/vanilla/config.xml#L58 <br> <syntaxhighlight lang="xml"> <options> .... <font>noto</font> </options> </syntaxhighlight> <br> Quindi, il carattere della classe del corpo viene definito utilizzando questo valore: https://github.com/LimeSurvey/LimeSurvey/blob/70a1d99cd2ebe411597231a8bc746b4ca9e19584/themes/survey/vanilla/views/layout_global.twig#L76 <syntaxhighlight lang="html"> <body class=" ... font-{{ aSurveyInfo.options.font }} ... " ... > </syntaxhighlight> Naturalmente, il file XML contiene solo i valori predefiniti per la configurazione del tema. Ma in effetti, quei valori sono definiti e letti all'interno del database (tabella "template_configuration" (Domanda: "template_" di "theme_"?) come stringhe json. Il file option.js usa solo il valore del selettore di font della semplice opzione per modificare il valore all'interno del modulo della scheda avanzata: https://github.com/LimeSurvey/LimeSurvey/blob/70a1d99cd2ebe411597231a8bc746b4ca9e19584/themes/survey/vanilla/options/options.js#L148-L174 Quindi, quando sarà disponibile la funzionalità "carica pacchetto risorse", sarà facile aggiungere uno script che scansiona tutti i pacchetti di font esistenti per aggiungerli nel selettore. == Aggiunta di opzioni del tema per controllare il posizionamento e la visualizzazione degli elementi del sondaggio == Questo tutorial mostrerà come aggiungere opzioni a un tema esteso per visualizzare gli elementi del sondaggio in varie posizioni. In questo caso, creeremo opzioni del tema per mostrare il titolo del sondaggio in due posizioni diverse. <div class="simplebox"> [[File:help.png]] Per semplicità, baseremo il tutorial su un'estensione del tema "bootswatch" in LimeSurvey versione 3.4.3.</div> === Crea un tema personalizzato === # Estendi il tema "bootswatch" come descritto sopra. # Copia <span style="color: #BA2121;">custom.css</span> nel tema locale come descritto sopra. ===Crea new theme options=== #Copia il contenuto di <span style="color: #BA2121;">/themes/survey/bootswatch/options/</span> in <span style="color: #BA2121;">/upload/themes/survey/yourThemeName/options/</span> . #Apri <span style="color: #BA2121;">/upload/themes/survey/yourThemeName/ options/options.twig</span> in un editor e trova "{# Bootstrap Bootswatch theme #}". Direttamente prima del suo genitore<nowiki><div class='row'></nowiki> elemento, aggiungi questo:<syntaxhighlight lang="html"> {# Nome sondaggio personalizzato nella barra di navigazione #} <div class='row'> <div class='col-sm-12 col-md-6'> <div class='form-group row'> <label for='simple_edit_options_surveyname1' class='control-label'>Nome del sondaggio nella barra di navigazione</label> <div class='col-sm-12'> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <input name='surveyname1' type='radio' value='on' class='selector_option_radio_field ' data-id='simple_edit_options_surveyname1'/> Sì </label> <label class="btn btn-default"> <input name='surveyname1' type='radio' value='off' class='selector_option_radio_field ' data-id='simple_edit_options_surveyname1'/> Non!</label> </div> </div> </div> </div> </div> <div class='row'> <hr/> </div> {# Nome del sondaggio personalizzato sotto la barra di avanzamento #} <div class='row'> <div class='col-sm-12 col-md-6'> <div class='form-group row'> <label for='simple_edit_options_surveyname2' class='control-label'>Nome del sondaggio sotto la barra di avanzamento</label> <div class='col-sm-12'> <div class="btn-group" data-toggle="buttons"> <label class="btn btn-default"> <input name='surveyname2' type='radio' value='on' class='selector_option_radio_field ' data-id='simple_edit_options_surveyname2'/> Sì </label> <label class="btn btn-default"> <input name='surveyname2' type='radio' value='off' class='selector_option_radio_field ' data-id='simple_edit_options_surveyname2'/> Non!</label> </div> </div> </div> </div> </div> <div class='row'> <hr/> </div></syntaxhighlight> #Apri <span style="color: #BA2121;">/upload/themes/survey/yourThemeName/config.xml</span> e aggiungi due elementi al blocco "opzioni" in modo che assomigli a questo:<syntaxhighlight lang="xml"><options> <ajaxmode> SU</ajaxmode> ... <surveyname1> SU</surveyname1> <surveyname2> SU</surveyname2> </options></syntaxhighlight> #Questo dovrebbe darti due nuove opzioni nella schermata Opzioni tema come questa:<br /> [[File:Tutorial_tp_1_1.png]] ===Vista modificata per il titolo del sondaggio nella barra di navigazione=== #Crea una nuova directory <span style="color: #BA2121;">/upload/themes/survey/yourThemeName/views/subviews/header/</span> . #Copy <span style="color: #BA2121;">/themes/survey/vanilla/ views/subviews/header/nav_bar.twig</span> nella nuova directory. # Apri <span style="color: #BA2121;">/themes/survey/vanilla/views/subviews/header/nav_bar.twig</span> e trova "{# Logo option #}". Al di sotto di questo, modifica l'istruzione IF per il logo/nome del sondaggio, in modo che assomigli a questo:<syntaxhighlight lang="html"> {# Opzione logo #} {% if( aSurveyInfo.options.brandlogo == "on") %} <div class="{{ aSurveyInfo.class.navbarbrand }} logo-container" {{ aSurveyInfo.attr.navbarbrand }} > {{ image(aSurveyInfo.options.brandlogofile, aSurveyInfo.name, {"class": "logo img-responsive"}) }} </div> {% endif %} {% if( aSurveyInfo.options.surveyname1 == "on") %} <div class="{{ aSurveyInfo.class.navbarbrand }}" {{ aSurveyInfo.attr.navbarbrand }} > {{ aSurveyInfo.name }} </div> {% finisci se %}</syntaxhighlight> # Aggiungi qualcosa di simile a <span style="color: #BA2121;">/upload/themes/survey/yourThemeName/css/custom.css</span> :<syntaxhighlight lang="css"> .navbar-marca { altezza della riga: 60px; dimensione carattere: 32px; }</syntaxhighlight> # Imposta l'opzione del tema "Nome del sondaggio nella barra di navigazione" su "Sì" #Dovresti vedere quanto segue:<br /> [[File:Tutorial_tp_1_2.png]] ===Vista modificata per il titolo del sondaggio nella barra di avanzamento=== #Crea una nuova directory <span style="color: #BA2121;">/upload/themes/survey/yourThemeName/views/subviews/survey/group_subviews</span> . #Copia <span style="color: #BA2121;">/themes/survey/vanilla/views/subviews/survey/group_subviews/group_container.twig</span> nella nuova directory. #Apri <span style="color: #BA2121;">/themes/survey/vanilla/views/subviews/survey/group_subviews/group_container .twig</span> e aggiungi un<nowiki><h1></nowiki> elemento per il nome del sondaggio. Quindi sembra così: <syntaxhighlight lang="html"><div class="{{ aSurveyInfo.class.groupcontainer }} space-col" {{ aSurveyInfo.attr.groupcontainer }}> {# Nome sondaggio personalizzato #} {% if( aSurveyInfo.options.surveyname2 == "on") %} <h1 class="custom-survey-name"> {{ aSurveyInfo.name }}</h1> {% endif %} {# nome gruppo #} {{ include('./subviews/survey/group_subviews/group_name.twig') }} {# Descrizione gruppo #} {{ include('./subviews/survey/group_subviews/group_desc.twig') }} {# PRESENTA LE DOMANDE Questa è la parte principale. Renderà ogni domanda per questo gruppo #} <!-- PRESENT THE QUESTIONS --> {% for aQuestion in aGroup.aQuestions %} {{ include('./subviews/survey/question_container.twig') }} {% endfor %} <!-- Hidden inputs --> {% if aGroup.show_last_group == true %} <input type='hidden' name='lastgroup' value='{{ aGroup.lastgroup }}' id='lastgroup' /> {% endif %} {% if aGroup.show_last_answer == true %} <input type='hidden' name='lastanswer' value='{{ aGroup.lastanswer }}' id='lastanswer' /> {% endif %} </div></syntaxhighlight> # Aggiungi qualcosa di simile a <span style="color: #BA2121;">/upload/themes/survey/yourThemeName/css/custom.css</span> :<syntaxhighlight lang="css"> .navbar-marca { line-height: 60ph1.custom-survey-name { margine: 0; text-align: center; }</syntaxhighlight> # Imposta l'opzione del tema "Nome del sondaggio sotto la barra di avanzamento" su "Sì" #Dovresti vedere quanto segue:<br /> [[File:Tutorial_tp_1_3.png]] ===Download=== * Tema esteso di esempio: [[Media:Test_survey_names.zip]] =Creazione di un tema da zero= Documentazione in arrivo. Per ora, solo qualche suggerimento. <span id="Theme_structure"></span> ==Struttura del tema== === File e directory === Quando crei un tema da zero, non è necessario rispettare la struttura di file/directory/css/js di Vanilla. Il css/js obbligatorio viene aggiunto dal core (è comunque possibile rimuoverlo se necessario) Gli unici file che il tuo tema deve avere sono i file di layout: * '''layout_global.twig''' : visualizza le pagine per l'esecuzione del sondaggio * '''layout_survey_list.twig''' : visualizza l'elenco dei sondaggi (se questo tema è impostato come predefinito) * '' 'layout_errors.twig''' : utilizzato per rendere gli errori che bloccano il rendering del sondaggio. (ID sondaggio errato, gruppo vuoto nel gruppo di anteprima, ecc.) * '''layout_user_forms.twig''': rende i moduli utente come: token (partecipante al sondaggio) e registrati. * '' 'layout_print.twig''' : utilizzato per stampare il sondaggio in pdf * '''layout_printanswers.twig''': stampa le risposte Il contenuto di quei file, i file che includono o meno, dipende interamente da te. Tutti gli altri file e directory che trovi su Vanilla sono puramente opzionali, sentiti libero di organizzare il tuo codice come preferisci. <div class="simplebox">[[File:help.png]] Se leggi il codice di rendering del frontend, vedrai che quei nomi di file appaiono direttamente in esso. Per questo sono obbligatori. Ad esempio: https://github.com/LimeSurvey/LimeSurvey/blob/2398dda3b425da1a37d4611cd7963d39ac739987/application/helpers/SurveyRuntimeHelper.php#L462 </div> <span id="Content"></span> === Contenuto === Nel layout_global.twig di Vanilla, vedrai che usiamo una variabile chiamata "include_content" per decidere cosa mostrare layout_global.twig#L114-L115 <syntaxhighlight lang="php"> {% set sViewContent = './subviews/content/' ~ aSurveyInfo.include_content ~ '.twig' %} {% include './subviews/content/outerframe.twig' con {'include_content': sViewContent } %} </syntaxhighlight> aSurveyInfo.include_content ti dice quale azione è attualmente in corso: mostrare domande? mostra il risultato dell'invio? mostrando chiaro tutto? etc Come puoi vedere, in vanilla, creiamo un file da includere per azione. Quindi, se vuoi conoscere l'elenco delle azioni, controlla la directory di vanilla '''views/subviews/content''' e rimuovi l'estensione "twig" : https://github.com/LimeSurvey/LimeSurvey /tree/2398dda3b425da1a37d4611cd7963d39ac739987/themes/survey/vanilla/views/subviews/content * '''clearall.twig''' * '''firstpage.twig''' * '''load.twig''' * '''mainrow.twig''' ! N!* '''main.twig''' * '''optin.twig''' * '''optout.twig''' * '''outerframe.twig'' ' * '''stamparisposte.ramoscello''' * '''quote.ramoscello''' * '''registra.ramoscello''' * '''salva.ramoscello ''' * '''submit_preview.twig''' * '''submit.twig''' * '''userforms.twig''' Se hai già creato un file per le versioni 2.x di LimeSurvey, noterai che la maggior parte di essi corrisponde ai vecchi file pstpl per limesurvey 2.x. Ancora una volta, non c'è alcun obbligo per te nel tuo tema di creare quei file, con quei nomi, in questa directory. Ad esempio, potresti semplicemente aggiungere un interruttore gigante in layout_global.twig con l'HTML desiderato per ogni azione. <span id="The_manifest_config.xml"></span> === Il file manifest config.xml === Il manifest del tema contiene le informazioni principali sul tuo tema. Quando installi un tema, il contenuto del manifest verrà caricato nel database, in due diverse tabelle: template e template_configuration. Quindi ogni volta che modifichi il manifest di un tema, devi disinstallarlo e reinstallarlo (o semplicemente reimpostarlo). Poiché questo processo è fastidioso durante lo sviluppo di un tema, è possibile forzare l'utilizzo diretto del file XML anziché delle voci del database. Per fare ciò, in config.php attiva la modalità di debug e 'force_xmlsettings_for_survey_rendering' su true. <span id="The_metadata_section"></span> ==== La sezione dei metadati ==== Niente di complesso: solo le informazioni principali sul tuo tema. Verrà inserito nella tabella templates_configuration <syntaxhighlight lang="xml"> <metadata> <name> the_name_of_your_theme</name> <title> Il titolo del tuo tema</title> <creationDate> 16/10/2017</creationDate> <author> Il tuo nome</author> <authorEmail> tua@email.org</authorEmail> <authorUrl> http://www.yourwebsite.org</authorUrl> <copyright> Il tuo diritto d'autore</copyright> <license> Licenza del tuo tema</license> <version> versione del tuo tema</version> <apiVersion> 3</apiVersion> <description> Descrizione del tuo tema</description> <extends> parent_theme</extends> </metadata> </syntaxhighlight> Alcune osservazioni: * '''nome''': verrà utilizzato come chiave nel db. Quindi deve essere univoco e non deve avere caratteri speciali (niente spazi). Nota che i casi non saranno presi in considerazione * '''Titolo''': verrà utilizzato per visualizzare il nome del tuo tema nelle diverse liste. Può avere caratteri speciali * '''descrizione''': verrà utilizzato nell'elenco principale del tema del sondaggio. Può contenere caratteri speciali e persino codice HTML utilizzando * '''extends''': opzionale, definisce i temi principali. Quindi se un file non è presente in questo tema (twig/js/css/jpg, ecc.) lo cercherà nel tema principale <div class="simplebox">[[File:help.png]] Se hai esteso uno dei 3 temi principali (Vanilla, Bootswatch, Fruity), puoi modificare il valore "extends" da un tema principale all'altro. Ovviamente dovrai reimpostare il tema.</div> <span id="The_files_section"></span> ==== La sezione dei file ==== Questo è importante. Verrà inserito nella tabella template_configuration, nel campo files_css, files_js, files_print_css come array json. Ad esempio: la sezione dei file del tema Material Premium: <syntaxhighlight lang="xml"> <files> <css> <add> css/bootstrap-material-design.css</add> <add> css/ripples.min.css</add> <replace> css/ajaxify.css</replace> <replace> css/tema.css</replace> <replace> css/custom.css</replace> <remove> awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css</remove> </css> <js> <replace> script/theme.js</replace> <replace> script/ajaxify.js</replace> <add> script/material.js</add> <add> script/ripples.min.js</add> <replace> script/custom.js</replace> </js> <print_css> <add> css/print_theme.css</add> </print_css> </files> </syntaxhighlight> Tutti i file CSS/JS presenti in questa sezione verranno caricati all'avvio del sondaggio (in modalità ajax. Se la modalità ajax è disattivata, ovviamente tutti i file vengono ricaricati ad ogni pagina). Verranno aggiunti a un pacchetto di risorse Yii in base al nome del tema. Quindi, quando Asset Manager è attivo (la modalità di debug è disattivata), quei file verranno copiati nella directory tmp con il resto del tema (quindi puoi utilizzare il percorso relativo in CSS e JS per raggiungere i file di immagine). Informazioni sul gestore patrimoniale in Yii: https://www.yiiframework.com/wiki/148/understanding-assets Informazioni sui pacchetti in Yii: http://www.yiiframework.com/doc/api/1.1 /CClientScript#dettaglio-pacchetti Useranno il sistema ereditario. Significa che se aggiungi un file CSS/JS a un tema, ma non è presente nel tema, il motore esaminerà tutti i temi madre di questo tema e utilizzerà il primo che trova. Quindi, se un utente estende il tuo tema tramite l'editor del tema, tutti quei file verranno ereditati nel suo tema. Le parole chiave si riferiscono a questo sistema di eredità. * '''add''' : aggiungerà il file al tema, ea tutti i suoi temi ereditati * '''replace''': sostituirà il file del suo tema madre * '''rimuovi''': rimuoverà il file da '''qualsiasi''' pacchetto, anche il pacchetto principale (dalla versione 3.14) <div class="simplebox">[[File:help.png]] Ricorda che puoi impostare in config.php 'force_xmlsettings_for_survey_rendering' in modo che la configurazione venga letta da XML invece che da DB (non è necessario alcun reset). Ciò renderà più facile testare le modifiche dei file XML e ti eviterà di disinstallare/reinstallare il tema ad ogni modifica dell'XML</div> Poche osservazioni su queste parole chiave: ===== Suggerimenti per l'ereditarietà ===== Come spiegato prima, la parola chiave "add" può fare riferimento a un file che si trova in uno dei temi madre. Quindi puoi "aggiungere" un file in questa sezione, e ancora non avere questo file nel tuo tema, ma in uno dei suoi temi genitori. Il motore esaminerà tutti i suoi temi principali e utilizzerà il primo che trova. Se non riesce a trovare il file e la modalità di debug è attiva nella configurazione e la modalità di debug del frontend js è attiva nell'impostazione globale, un messaggio nella console ti avviserà. Ad esempio: se aggiungiamo un my_theme:<add> css/unexisting.css</add> , nella console vedremo: <syntaxhighlight lang=""> (¯`·._.·(¯`·._.· Errore di configurazione del tema ·._.·´¯)·._.·´¯) Impossibile trovare il file 'css/unexisting.css' definito nel tema 'my_theme' </syntaxhighlight> Se la modalità di debug è disattivata, non verrà visualizzato alcun errore. Il motore ignorerà semplicemente le istruzioni add errate. <span id="When_to_use_add,_when_to_use_replace,_when_can_I_just_leave_it_to_the_parent_theme?"></span> ===== Quando usare aggiungi, quando usare sostituisci, quando posso semplicemente lasciarlo al tema principale? ===== Primo: aggiungere e sostituire sono la stessa parola chiave. Puoi usare l'uno o l'altro, il motore farà lo stesso. Sono distinti per i lettori umani, quindi capiscono qual era la tua intenzione. Non puoi aggiungere un file con lo stesso nome del tema madre: lo sostituirà sempre. ad esempio: se hai un file chiamato "my_mother_theme/foo.css" e aggiungi un file chiamato "foo.cs" nel tema figlia, solo "figlia_theme/foo.css" verrà aggiunto al tema. Se vuoi mantenere "my_mother_theme/foo.css", basta scegliere un altro nome per "figlia_theme/foo.css", come "figlia_tema/bar.css". Quindi la parola chiave "aggiungi" può essere utilizzata come parola chiave "sostituisci". Se ti chiedi perché: questo rende molto più semplice la generazione automatica del tema ereditato, la copia della sezione del file funziona immediatamente (non è necessario rinominare "aggiungi" in "sostituisci" quando si estende il file). Per chiarire, prendiamo l'esempio di Fruity. Qui la sua sezione del file css: <syntaxhighlight lang="xml"> <css> <add> css/variazioni/sea_green.css</add> <replace> css/animate.css</replace> <replace> css/tema.css</replace> <replace> css/custom.css</replace> </css> </syntaxhighlight> Se guardi al file custom.css in fruity, è esattamente uguale a quello vanilla. Potremmo eliminare il file custom.css all'interno di fruity, verrebbe caricato quello di vanilla. Potremmo rimuovere la dichiarazione<replace> CSS personalizzato</replace> dal Fruity manifest, verrà utilizzata l'istruzione da vanilla e verrà caricato il file vanilla custom.css. Allora perché usiamo la dichiarazione<replace> CSS personalizzato</replace> all'interno del manifesto fruttato? La risposta è semplice: perché vogliamo che l'utente finale sia in grado di estendere il tema fruttato, modificare il file nel suo tema locale e caricare questo file modificato dal suo tema ereditato. Per capire basta estendere fruity e dare un'occhiata al tema esteso. Il tema esteso non ha nemmeno il file custom.css. Quindi verrà utilizzato quello di fruttato. Ma: se l'utente crea questo file nel tema esteso (facendo clic su "estende" nell'editor del tema), questo file verrà caricato dal suo tema. Quindi in generale: se crei un tema da zero senza estendere alcun tema, usa semplicemente l'istruzione add per aggiungere i tuoi file css/js. Facile. se crei un tema che estende un altro tema e non vuoi che gli utenti siano in grado di estendere il file css/js dal tema madre: non usare l'istruzione add nel tuo manifest. I file verranno comunque caricati dalla configurazione del tema madre. se crei un tema che estende un altro tema e vuoi sostituire un file dal tema madre: usa la parola chiave replace (la parola chiave add avrà lo stesso risultato) se crei un tema che estende un altro tema, se non sostituisci un dato file da css/js, ma vuoi che gli utenti siano in grado di estendere questo file: allora usa l'istruzione "replace" nel tuo manifest per questa vita. Anche se non si sostituisce il file, utilizzando la parola chiave replace nel manifest: si consente all'utente di farlo se lo desidera. Solo quest'ultimo caso ha bisogno di un po' di ginnastica mentale per capire, tutti gli altri casi sono banali. <div class="simplebox">[[File:help.png]] Puoi anche registrare file CSS e JS direttamente dal codice twig. Questi file verranno caricati solo quando viene richiesto il file twig. Se vuoi che gli utenti possano ereditare quei file JS/Css dall'editor del tema, ricordati di usare le funzioni {{registerTemplateCssFile('my_style.css')}} e {{registerTemplateScript('my_script.js')}} . Se non usi queste funzioni, il tuo tema potrebbe funzionare, ma l'ereditarietà su di esso verrà interrotta. È la stessa logica della funzione {{image('my_picture.jpg')}} </div> <span id="The_remove_keyword"></span> ===== La parola chiave remove ===== La parola chiave remove è disponibile solo dalla versione 3.14. Con questo, puoi rimuovere qualsiasi css/file da qualsiasi pacchetto, anche quelli principali. Viene utilizzato nel tema Material Premium per rimuovere i file di Awseome Bootstrap Checkbox: <syntaxhighlight lang="xml"> <remove> awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css</remove> </syntaxhighlight> quindi dovresti usare la stessa sintassi del file del pacchetto (ad esempio: "awesome-bootstrap-checkbox.css" da solo senza il percorso della cartella non funzionerebbe). Troverai l'elenco completo dei pacchetti principali e dei loro file in /application/config/packages.php e config/third_party.php. Ad esempio, per awesome-bootstrap-checkbox.css: https://github.com/LimeSurvey/LimeSurvey/blob/2398dda3b425da1a37d4611cd7963d39ac739987/application/config/packages.php#L54-L56 <syntaxhighlight lang="php"> 'css'=> array( 'awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css', ), </syntaxhighlight> Un altro modo per trovare il nome esatto da utilizzare nel tag di rimozione è attivare l'asset manager (disattivando la modalità di debug o impostando 'use_asset_manager'=>true nella configurazione). Quindi, il percorso da utilizzare sarà quello subito dopo la directory casuale nella directory tmp. Ad esempio, per awesome-bootstrap-checkbox.css: <syntaxhighlight lang="html"> <link rel="stylesheet" type="text/css" href="/tmp/assets/cbc4e3cb/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css" /> </syntaxhighlight> File da non rimuovere: '''jquery-3.1.1.min.js''' : necessario '''jquery-migrate-3.0.0.min.js''' : necessario '''survey.js''' : necessario '''moment-with-locales.min.js''' : necessario per il tipo di domanda sulla data (e qualche altro credo) '''em_javascript.js''' : necessario per tutti i javascript ExpressionScript <span id="The_options_section"></span> ==== La sezione delle opzioni ==== Questa sezione è relativa all'opzione del tuo tema. Verrà utilizzato per alimentare le "opzioni" archiviate della tabella template_configuration come un array json. <span id="Further_information"></span> === Ulteriori informazioni === * [[Tema:Funzione disponibile]] <span id="Some_notes"></span> == Alcune note == '''NOTA''': se modifichi il file XML di un tema, devi disinstallare e reinstallare il tema in modo che venga preso in considerazione. '''NOTA''': per evitarlo, si può forzare l'uso dell'XML piuttosto che del DB. In config.php attiva la modalità di debug e decommenta: 'force_xmlsettings_for_survey_rendering' => true, // Rimuovi il commento se vuoi forzare l'uso del file XML piuttosto che del DB (per facilitare lo sviluppo del tema) Attenzione: tutto verrà caricato dall'XML (opzioni incluse, ecc.) '''NOTA''': se modifichi manualmente i file CSS/JS (senza utilizzare l'editor dei temi) e se la modalità di debug è disattivata, ora puoi forzare lo svuotamento dell'asset. In "Impostazioni globali", "scheda Generale", fai clic sul pulsante "Cancella cache risorse". '''NOTA''': se si rimuove la sezione