Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
22/02/2016, 13:27:13
(Modification du message : 22/02/2016, 18:33:37 par snatch1974.)
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: ?
#~ Url du site : grignan.loft.galerie
#~ Hébergeur / Soft : o2switch
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 2.1.2
#~ Installed Modules:
#~ AdminSearch: 1.0
#~ CGContentUtils: 2.1
#~ CGExtensions: 1.51.1
#~ CGGoogleMaps2: 0.99.3
#~ CGSimpleSmarty: 2.0.5
#~ CMSContentManager: 1.1
#~ CMSMailer: 6.2.14
#~ DesignManager: 1.1.1
#~ ExaCSS: 2.0.2
#~ FileManager: 1.5.2
#~ FormBuilder: 0.8.1.3
#~ JQueryTools: 1.3.8
#~ MicroTiny: 2.0.3
#~ MleCMS: 1.11.5
#~ ModuleManager: 2.0.2
#~ Navigator: 1.0.2
#~ News: 2.50.4
#~ Search: 1.50.2
#~ TinyMCE: 3.1.2
#~ Config Information:
#~ php_memory_limit:
#~ max_upload_size: 512000000
#~ url_rewriting: mod_rewrite
#~ page_extension: .html
#~ query_var: page
#~ auto_alias_content: true
#~ locale:
#~ set_names: true
#~ timezone: Europe/Paris
#~ permissive_smarty: false
#~ Php Information:
#~ phpversion: 5.5.32
#~ md5_function: On (Vrai)
#~ json_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_ALL: 24567
#~ E_STRICT: 2048
#~ E_DEPRECATED: 0
#~ test_file_timedifference: Aucune différence de date du système trouvée
#~ test_db_timedifference: Aucune différence de date du système trouvée
#~ create_dir_and_file: 1
#~ memory_limit: 512M
#~ max_execution_time: 120
#~ register_globals: Off (Faux)
#~ output_buffering: 4096
#~ disable_functions:
#~ open_basedir:
#~ test_remote_url: Valable
#~ file_uploads: On (Vrai)
#~ post_max_size: 512M
#~ upload_max_filesize: 512M
#~ session_save_path: /tmp (0700)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ check_ini_set: On (Vrai)
#~ curl: On
#~ Performance Information:
#~ allow_browser_cache: Off (Faux)
#~ browser_cache_expiry: 60
#~ php_opcache: On (Vrai)
#~ smarty_cache: Off (Faux)
#~ smarty_compilecheck: Off (Faux)
#~ smarty_cache_udt: Off (Faux)
#~ auto_clear_cache_age: On (Vrai)
#~ Server Information:
#~ Server Software: Apache
#~ Server Api: litespeed
#~ Server Os: Linux 2.6.32-531.29.2.lve1.3.11.10.el6.x86_64 On x86_64
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.6.28
#~ Server Db Grants: Trouvé un privilège "GRANT ALL" qui semble être adapté
#~ Permission Information:
#~ tmp: /home/farangpr/Sites/grignanloftgalerie/tmp (0755)
#~ tmp_cache: /home/farangpr/Sites/grignanloftgalerie/tmp/cache (0755)
#~ templates_c: /home/farangpr/Sites/grignanloftgalerie/tmp/templates_c (0755)
#~ modules: /home/farangpr/Sites/grignanloftgalerie/modules (0755)
#~ uploads: /home/farangpr/Sites/grignanloftgalerie/uploads (0755)
#~ Masque de création de fichier (umask) : /home/farangpr/Sites/grignanloftgalerie/tmp/cache (0755)
#~ config_file: 0644
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour à tous,
Pour personnaliser un menu d'un site multilingue, je voulais utiliser la fonction preg_match dans le gabarit du menu afin d'attribuer une classe uniquement au premier node de second niveau (1.1 ou 2.1 ou 3.1 ...)
j'ai donc, fait comme ça:
Code : [== PHP ==]
{if preg_match("/^\d[\.][1]$/", $node->hierarchy)}
{$href_class = ['icon-home']}
{/if}
Le problème est que j'ai une erreur me disant que cette fonction est interdite:
[ins]Syntax error in template "cms_template:GLG Main Navigation" on line 27 "{if preg_match("/^\d[\.][1]$/", $hierarchy)}" PHP function 'preg_match' not allowed by security setting[/ins]
Pourquoi la fonction est interdite, et y'a-t-il une solution pour contourner cette interdiction?
Merci
Messages : 11,042
Sujets : 231
Inscription : Sep 2007
Réputation :
1
Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
jce76350 a écrit :>Pourquoi la fonction est interdite
parce que c'est un danger
Ok, je comprends que certaines fonctions puissent être dangereuse et que donc...
Code : [== Indéfini ==]
$config['permissive_smarty'] = 1;
... la modif du fichier config puissent ouvrir des failles de sécurité
Est-ce possible alors d'arriver au même résultat dans le template du menu sans passer par un preg_match ?
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Au lieu de mettre une classe, tu utilises le sélecteur :first-child Code : ul > :first-child {
//les propriétés contenues dans ta classe icon-home
}
Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
Jean le Chauve a écrit :Au lieu de mettre une classe, tu utilises le sélecteur :first-child Code : ul > :first-child {
//les propriétés contenues dans ta classe icon-home
}
Ca, je suis d'accord pour pour la feuille de css mais pour remplacer le texte du menu par une icone font, il faut que je passe par une classe et que je supprime le texte directement dans le menu:
Code : [== PHP ==]
{if preg_match("/^\d[\.][1]$/", $node->hierarchy)}
{$href_class = ['icon-home']}
{/if}
...
{* regular item *}
<li{do_class classes=$list_class}{$aria_support}>
<a{do_class classes=$href_class} href='{$node->url}'{if $node->target != ''} target='{$node->target}'{/if}>{if !preg_match("/^\d[\.][1]$/", $node->hierarchy)}{$node->menutext}{$parent_indicator}{/if}</a><br/><span class="menuborder"></span>
{if isset($node->children)}
{Simplex_menu data=$node->children depth=$depth+1}
{/if}
</li>
avec mon css qui donne ça:
Code : [== CSS ==]
[class^="icon-"], [class*=" icon-"] {
font-family: 'icomoon';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-home:before {
content: "\e907";
}
Le css, je peux le transposer à ul > :first-child, comme tu le dis, y'a pas de soucis, mais pour supprimer le texte du menu et n'avoir que l'icone... sans passer par des position:absolute et des left: -9999px pour le texte, le plus simple est de conditionner l'affichage directement dans le template du menu.
Du moins, je vois ça comme ça pour le moment...
Messages : 2,309
Sujets : 71
Inscription : Jan 2008
Réputation :
1
Je ne vois pas l'intérêt de ne pas le gérer par le css : plus simple à mettre en place et surtout plus accessible.
Ouik - communication . outils numériques . design graphique
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Et avec un {if depth>1 && $node@first}{else}{$node->menutext}{$parent_indicator}{/if} ?
Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
C'est bon !!!!
En fait, en faisant un explode de $node->hierarchy pour récupérer le premier chiffre et en le concaténant avec ".1" qui est la position voulue dans le menu on obtient toutes les premières pages du second niveau:
Code : [== Indéfini ==]
{foreach $data as $node}
{assign var='hierarchy' value="."|explode:$node->hierarchy}
{assign var='hierarchy' value=$hierarchy[0]|cat:".1"}
{* setup classes for the anchor and list item *}
...
{if $node->hierarchy == $hierarchy}
{$href_class = ['icon-home']}
{/if}
...
{* regular item *}
<li{do_class classes=$list_class}{$aria_support}>
<a{do_class classes=$href_class} href='{$node->url}'{if $node->target != ''} target='{$node->target}'{/if}>
{if $node->hierarchy != $hierarchy}{$node->menutext}{$parent_indicator}{/if}
</a>
<br/><span class="menuborder"></span>
{if isset($node->children)}
{Simplex_menu data=$node->children depth=$depth+1}
{/if}
</li>
{/if}
{/foreach}
Ouik a écrit :Je ne vois pas l'intérêt de ne pas le gérer par le css : plus simple à mettre en place et surtout plus accessible.
Comme je l'ai dit juste avant, je veux une icone et pas une icone + texte.
En css, on ne peux pas remplacer du contenu, on peut en rajouter avant ou après mais pas supprimer dfu texte.
Sinon, il aurait fallu englober le texte dans une balise <span> par exemple et rendre cette balise non visible et je n'avais pas envie de ça.
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Regarde mon post précédent, si ce n'est pas déjà fait.
Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
22/02/2016, 17:33:40
(Modification du message : 22/02/2016, 17:40:03 par snatch1974.)
Jean le Chauve a écrit :Regarde mon post précédent, si ce n'est pas déjà fait.
Je l'ai vu juste après avoir posté ma solution fonctionnelle.
Je viens d'essayer la tienne et j'ai l'icone+le texte, ce qui est con car c'était encore plus simple et mieux
par contre ta solution fonctionne comme ça:
Code : {if $depth==0 && $node@first}{else}{$node->menutext}{$parent_indicator}{/if}
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
22/02/2016, 17:40:36
(Modification du message : 22/02/2016, 17:48:27 par Jean le Chauve.)
{if $depth>0 && $node@first}
ou $node->depth > 0
Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
Jean le Chauve a écrit :{if $depth>1 && $node@first}
$depth est 0 pour toutes les pages de mon premier niveau, qui est en fait le second mais pt'etre que le childrenof change la profondeur des pages.
Code : [== Indéfini ==]
{Navigator loadprops='0' childrenof=$lang_parent template='GLG Main Navigation'}
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
On se croise, je viens de modifier le post précédent.
Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
C'est bien $depth==0 dans mon cas qu'il faut utiliser car avec $depth>0 toutes les premières pages de chaque niveau sont impactées et moi je ne veux que celle du premier niveau affiché
En tout cas merci pour ce bout de code, c'est simple, clair et ça fait le job !
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
22/02/2016, 18:09:42
(Modification du message : 22/02/2016, 18:13:58 par Jean le Chauve.)
Effectivement quand tu nous auras tout dit
Tu aimes faire durer le suspens
Citation :pour remplacer le texte du menu par une icone font, il faut que je passe par une classe et que je supprime le texte directement dans le menu:
Citation :childrenof=$lang_parent
La prochaine fois, essaye de donner tous les renseignements utiles dès le premier message
Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
snatch1974 a écrit :Pour personnaliser un menu d'un site multilingue, je voulais utiliser la fonction preg_match dans le gabarit du menu afin d'attribuer une classe uniquement au premier node de second niveau (1.1 ou 2.1 ou 3.1 ...)
En disant un menu multilingue, il me semblait qu'il allait de soit qu'il y'avait un childrenof dans la déclaration et j'ai bien précisé "uniquement au premier node de second niveau" :p
J'aurais dû être plus clair, c'est de ma faute mais avec un depth à 0 et une hierarchy qui commence à 2.1, on s'embrouille rapidement ! :lol:
En tout cas, un grand grand merci
Je clôs?
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
22/02/2016, 18:31:03
(Modification du message : 22/02/2016, 18:35:29 par Jean le Chauve.)
Clos mon ami, clos :p
Et pour finir en beauté, "clore" ne prend un accent circonflexe qu'à la 3e personne du singulier de l'indicatif présent
Messages : 2,309
Sujets : 71
Inscription : Jan 2008
Réputation :
1
snatch1974 a écrit :Ouik a écrit :Je ne vois pas l'intérêt de ne pas le gérer par le css : plus simple à mettre en place et surtout plus accessible.
Comme je l'ai dit juste avant, je veux une icone et pas une icone + texte.
En css, on ne peux pas remplacer du contenu, on peut en rajouter avant ou après mais pas supprimer dfu texte.
Sinon, il aurait fallu englober le texte dans une balise <span> par exemple et rendre cette balise non visible et je n'avais pas envie de ça.
TU n'en as peut-être pas envie, certains de tes utilisateurs, très certainement. Bref, dommage pour eux. :/
Ouik - communication . outils numériques . design graphique
Messages : 602
Sujets : 81
Inscription : Jan 2011
Réputation :
0
Ouik a écrit :snatch1974 a écrit :Ouik a écrit :Je ne vois pas l'intérêt de ne pas le gérer par le css : plus simple à mettre en place et surtout plus accessible.
Comme je l'ai dit juste avant, je veux une icone et pas une icone + texte.
En css, on ne peux pas remplacer du contenu, on peut en rajouter avant ou après mais pas supprimer dfu texte.
Sinon, il aurait fallu englober le texte dans une balise <span> par exemple et rendre cette balise non visible et je n'avais pas envie de ça.
TU n'en as peut-être pas envie, certains de tes utilisateurs, très certainement. Bref, dommage pour eux. :/
C'est juste une page d'accueil sans grand intérêt réel donc, juste une icone en forme de petite maison pour matérialiser cette page dans le menu est amplement suffisant sur ce coup là... en plus le site concerne une gallerie d'art à vendre donc, la petite maison va bien et moins longtemps le site restera en ligne, mieux ce sera car celà voudra dire qu'elle est vendue ! :lol:
|