[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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
[Résolu]PREG_MATCH dans un {if} -
jce76350 - 22/02/2016
>Pourquoi la fonction est interdite
parce que c'est un danger
Voir
Syntax error in template "..." on line 1 "..." PHP function '...' not allowed by security setting.
[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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 ?
[Résolu]PREG_MATCH dans un {if} -
Jean le Chauve - 22/02/2016
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
}
[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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...
[Résolu]PREG_MATCH dans un {if} -
Ouik - 22/02/2016
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.
[Résolu]PREG_MATCH dans un {if} -
Jean le Chauve - 22/02/2016
Et avec un {if depth>1 && $node@first}{else}{$node->menutext}{$parent_indicator}{/if} ?
[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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.
[Résolu]PREG_MATCH dans un {if} -
Jean le Chauve - 22/02/2016
Regarde mon post précédent, si ce n'est pas déjà fait.
[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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}
[Résolu]PREG_MATCH dans un {if} -
Jean le Chauve - 22/02/2016
{if
$depth>0 && $node@first}
ou $node->depth > 0
[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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'}
[Résolu]PREG_MATCH dans un {if} -
Jean le Chauve - 22/02/2016
On se croise, je viens de modifier le post précédent.
[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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 !
[Résolu]PREG_MATCH dans un {if} -
Jean le Chauve - 22/02/2016
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
[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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?
[Résolu]PREG_MATCH dans un {if} -
Jean le Chauve - 22/02/2016
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
[Résolu]PREG_MATCH dans un {if} -
Ouik - 22/02/2016
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. :/
[Résolu]PREG_MATCH dans un {if} -
snatch1974 - 22/02/2016
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: