Forum CMS Made Simple Francophone

Aide francophone sur CMS Made Simple

Vous n'êtes pas identifié(e).

Annonce

ATTENTION

  • Prenez le temps de rechercher si quelqu'un n'a pas déjà proposé une solution à votre problème. Sur le forum français et sur le wiki
  • Pensez à mettre à jour votre version de CMS Made Simple. Nous ne faisons de support que sur LA dernière version de CMS Made Simple.
  • Renseignez impérativement le formulaire de nouveau message de manière la plus complète que possible. Dans votre CMS utiliser le menu Administration du site/Informations du système en haut Vue au format texte. Ces informations demandées nous permettent de mieux vous aider
  • Ajoutez [Résolu] au début du titre de votre 1er message lorsqu'une solution a été trouvée.

#1 22/02/2016 13:27:13

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

[Résolu]PREG_MATCH dans un {if}

#~~~~~ 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:

[== 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:

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

Pourquoi la fonction est interdite, et y'a-t-il une solution pour contourner cette interdiction?

Merci

Dernière modification par snatch1974 (22/02/2016 18:33:37)

Hors ligne

#2 22/02/2016 14:30:26

jce76350
Administrateur
Lieu : Rouen
Inscription : 23/09/2007
Messages : 6 101
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

>Pourquoi la fonction est interdite
parce que c'est un danger wink
Voir  Syntax error in template "..." on line 1 "..." PHP function '...' not allowed by security setting.


J-C Etiemble Tutoriels v 2.2.x

Hors ligne

#3 22/02/2016 14:46:11

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

Re : [Résolu]PREG_MATCH dans un {if}

jce76350 a écrit :

>Pourquoi la fonction est interdite
parce que c'est un danger wink

Ok, je comprends que certaines fonctions puissent être dangereuse et que donc...

[== 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 ?

Hors ligne

#4 22/02/2016 16:35:53

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 693
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

Au lieu de mettre une classe, tu utilises le sélecteur :first-child

ul > :first-child {
    //les propriétés contenues dans ta classe icon-home
}

Hors ligne

#5 22/02/2016 17:00:38

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

Re : [Résolu]PREG_MATCH dans un {if}

Jean le Chauve a écrit :

Au lieu de mettre une classe, tu utilises le sélecteur :first-child

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:

[== 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:

[== 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...

Hors ligne

#6 22/02/2016 17:09:46

Ouik
Modérateur
Lieu : Bourgogne
Inscription : 08/01/2008
Messages : 1 080
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

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.

Hors ligne

#7 22/02/2016 17:23:45

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 693
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

Et avec un {if depth>1 && [email protected]}{else}{$node->menutext}{$parent_indicator}{/if} ?

Hors ligne

#8 22/02/2016 17:25:37

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

Re : [Résolu]PREG_MATCH dans un {if}

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:

[== 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.

Hors ligne

#9 22/02/2016 17:27:07

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 693
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

Regarde mon post précédent, si ce n'est pas déjà fait.

Hors ligne

#10 22/02/2016 17:33:40

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

Re : [Résolu]PREG_MATCH dans un {if}

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:

{if $depth==0 && [email protected]}{else}{$node->menutext}{$parent_indicator}{/if}

Dernière modification par snatch1974 (22/02/2016 17:40:03)

Hors ligne

#11 22/02/2016 17:40:36

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 693
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

{if $depth>0 && [email protected]}
ou $node->depth > 0

Dernière modification par Jean le Chauve (22/02/2016 17:48:27)

Hors ligne

#12 22/02/2016 17:47:44

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

Re : [Résolu]PREG_MATCH dans un {if}

Jean le Chauve a écrit :

{if $depth>1 && [email protected]}

$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.

[== Indéfini ==]
{Navigator loadprops='0' childrenof=$lang_parent template='GLG Main Navigation'}

Hors ligne

#13 22/02/2016 17:49:14

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 693
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

On se croise, je viens de modifier le post précédent.

Hors ligne

#14 22/02/2016 18:04:35

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

Re : [Résolu]PREG_MATCH dans un {if}

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 !  wink

Hors ligne

#15 22/02/2016 18:09:42

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 693
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

Effectivement quand tu nous auras tout dit wink
Tu aimes faire durer le suspens smile

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:

childrenof=$lang_parent

La prochaine fois, essaye de donner tous les renseignements utiles dès le premier message wink

Dernière modification par Jean le Chauve (22/02/2016 18:13:58)

Hors ligne

#16 22/02/2016 18:19:07

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

Re : [Résolu]PREG_MATCH dans un {if}

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" tongue

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 wink

Je clôs?

Hors ligne

#17 22/02/2016 18:31:03

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 693
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

Clos mon ami, clos  tongue
Et pour finir en beauté, "clore" ne prend un accent circonflexe qu'à la 3e personne du singulier de l'indicatif présent  cool

Dernière modification par Jean le Chauve (22/02/2016 18:35:29)

Hors ligne

#18 22/02/2016 18:43:04

Ouik
Modérateur
Lieu : Bourgogne
Inscription : 08/01/2008
Messages : 1 080
Site Web

Re : [Résolu]PREG_MATCH dans un {if}

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.  hmm

Hors ligne

#19 22/02/2016 18:53:59

snatch1974
Membre
Inscription : 18/01/2011
Messages : 300

Re : [Résolu]PREG_MATCH dans un {if}

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.  hmm

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

Hors ligne

Pied de page des forums