Forum CMS Made Simple FR

Version complète : [Résolu]Récupérer le niveau hiérarchique d'une page appelante
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.

eric62

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.2
#~ Url du site : http://new.saintnicolaslahulpe.org/
#~ Hébergeur / Soft : scoutnet.be
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.10.2
#~ Installed Modules:
#~ CMSMailer: 2.0.2
#~ CMSPrinting: 1.0
#~ FileManager: 1.2.0
#~ MenuManager: 1.7.7
#~ MicroTiny: 1.1.1
#~ ModuleManager: 1.5.3
#~ News: 2.12.3
#~ Search: 1.7
#~ ThemeManager: 1.1.4
#~ Gallery: 1.4.4
#~ CGExtensions: 1.27.9
#~ CGCalendar: 1.9
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ output_compression: false
#~ max_upload_size: 20000000
#~ default_upload_permission: 664
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.2.17-pl0-gentoo
#~ md5_function: On (True)
#~ gd_version: 2
#~ tempnam_function: On (True)
#~ magic_quotes_runtime: Off (False)
#~ E_STRICT: 0
#~ memory_limit: 64M
#~ max_execution_time: 30
#~ output_buffering: 4096
#~ safe_mode: Off (False)
#~ file_uploads: On (True)
#~ post_max_size: 20M
#~ upload_max_filesize: 20M
#~ session_save_path: No check because open basedir active
#~ session_use_cookies: On (True)
#~ xml_function: On (True)
#~ Server Information:
#~ Server Api: apache2handler
#~ Server Db Type: MySQL (mysql)
#~ Server Db Version: 5.0.90
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Ecrivez votre question ici.

Bonjour,

Pour harmoniser/automatiser certaines pages, j'utilise des "pages génériques" qui récupère un argument de 'POST' pour, via un UDT, une recherche spécifique sur la BD et un affichage en correspondance. J'ai également besoin, pour l'affichage d'un sous-menu des pages du même niveau hiérarchique, de connaitre la position de la page appelante. N'est-ce pas possible (via un smarty ou autre) ?

Actuellement, je passe cela également comme paramètre, mais avec comme problème que si je change l'ordre des pages, je dois ré-adapter "à la main" tous les paramètres.

Comme exemple, j'ai une page "Liste des membres" qui a pour parent le 3.4.1.1, et pour qui je passe dans "additional parameters" une variable à laquelle j'assigne cette valeur (et qu'il me faut donc manuellement changer si le 'parent' est modifié par l'insertion /suppression d'une page).

Une variable $_SESSION actualisée par la page appelante fait évidemment l'affaire, mais pose naturellement problème si on ouvre d'autres fenêtres/tabs en même temps.

Merci pour vos idées.
Bonjour et bienvenue,
puisque tu développes, tu peux t'inspirer du module "menuManager" qui travaille avec la hiérarchie des pages.
Dans ton UDT, tu peux aussi interroger la BDD et récupérer les champs "parent_id" et "hierarchy" dans la table content.
Je ne suis pas sûr d'avoir compris à quel niveau et pourquoi tu as besoin de la hiérarchie, mais tout est dans la table content.
eric62 a écrit :J'ai également besoin, pour l'affichage d'un sous-menu des pages du même niveau hiérarchique
Est-ce qu'une simple balise
Code :
{menu start_level="2"}
ne suffit pas?

eric62

Bon, en cherchant un peu, il y a bien-sûr la "méthode dure", à se faire un petit utilitaire de "mise en cohérence" qui va récupérer dans la table "cms_content" le champ "hierarchy" qui a p.e. la valeur "00003.00004.00001.00001.00001" et mettre à jour la valeur correspondante du champ "params" dans la table "cms_content_props" avec pour valeur "&Depth=3.4.1.1"

Mais bon, il y a peut-être + élégant Rolleyes ...

eric62

Merci pour la réponse Smile !

jissey a écrit :Dans ton UDT, tu peux aussi interroger la BDD et récupérer les champs "parent_id" et "hierarchy" dans la table content
Le problème, c'est que le parent réel est une simple rubrique "non-visible", et que la/les pages appelantes sont de simples "Internal Page Link" avec la "cible" définie dans la "Destination Page"
jissey a écrit :Est-ce qu'une simple balise
Code :
{menu start_level="2"}
ne suffit pas?
Ben justement, c'est la valeur du "2" que j'aimerai avoir comme variable, avec comme valeur celle de la page "appelante" (et pas "parente").
et si tu réussi à récupèrer le http_referer?

eric62

jissey a écrit :et si tu réussi à récupèrer le http_referer?
Malheureusement ça ne marche pas, car http_refer retourne la page précédente, mais pas (p.e.) le (sous-)menu sur lequel on a clické pour avoir la page. On peut donc avoir le 1. qui via menu fait appel au 3.4.4.1... Ce que je voudrais récupérer, c'est 3.4.4, pas 1.
désolé, difficile de t'aider plus pour moi, je passe la main.
http://wiki.cmsmadesimple.org/index.php/...y-position
http://wiki.cmsmadesimple.org/index.php/....27s_alias



tu peux t'inspirer de ces exemples pour récupérer la node parente de ta page, de définir son level et d'afficher ensuite {menu start_level="$new_var"} dans ton gabarit pour afficher le menu désiré.


code rapide non testé à placer dans une UDT que t'appellera avant {menu ...} dans ton template

Code :
global $smarty;

$manager =& cmsms()->GetHierarchyManager();

$thisPage = cmsms()->variable['content_id'];
$currentNode = &$manager->sureGetNodeById($thisPage);

$result = 0;
if( isset($currentNode) && $currentNode->getLevel() >= 0 )
{
   $result = $currentNode->getLevel() -1;
}

$smarty->assign("new_var",$result);

PS: je suis pas certain pour la ligne 3, essai également :

$thisPage = cmsms()->get_variable['content_id'];

eric62

Smile Trop fort ! Excellent, Ca marche...

J'avais pourtant essayé plusieurs trucs du genre, le 'code' actuel étant:

Code :
# Name: hierarchy
global $gCms;
$depth= $_GET['Depth'];
$pos = $gCms->variables['position'];
$base = explode('.', $pos);
$smarty->assign('h_level', $depth);
$smarty->assign('h_cur_level', $pos);
$smarty->assign('h_toplevel', $base[0] * 1);
$smarty->assign('h_parent',   $base[ (count($base) > 1) ? count($base)-2 : 0 ] * 1);
$smarty->assign('h_this',     $base[count($base)-1] * 1);

# echo $_SERVER["HTTP_REFERER"];
# echo "position: ".$depth." - ".$_SESSION['src_level']."<br>";
# echo "position: ".$depth." - ".$h_src_level."<br>";
# $tpl_vars = $smarty->get_template_vars();
# print_r($tpl_vars );
# print_r($gCms);
Mais là, c'est tout bon, plus besoin de passer le $depth en argument.

La "page générique" est devenue:

Citation :{hierarchy}{menu start_element=$new_var template="minimal_psn"}

{equipe}

$new_var remplacant $h_level.

Mille mercis !!