Bonjour,

Pourrais-tu décrire plus précisément ce que tu appelles "fonction" ?
Par Julian Espérat , 25 mars 2013 ·
Bin logiquement, j'imagine que la page menu.view.php permet à une page de définir une mise en page pour un menu (ici menu dans le header normalement). C'est ce que j'appelle "fonction", qu'on appelle ensuite depuis la page "top_menu_view.php" (pour le coup).

Mais ensuite, comment on exploite le contenu de menu.view.php ? On l'intègre comme le menu dans le header (ou dessous peu importe) ?
Par Jos , 25 mars 2013 ·
Alors, rien ?
Par Jos , 27 mars 2013 ·
Je suis désolé Jos, j'avoue ne pas avoir tout compris aussi.

Tu veux créer un template avec une forme de menu différente des 2 proposées par défaut ?
Par Gilles FELIX , 28 mars 2013 ·
En fait dans un premier temps, j'aimerais comprendre comment on crée simplement un menu qui utilisera la template menu ^^

Dans WP tu vas éditer ça dans le menu Apparences, mais dans Novius je ne trouve pas d'endroit où créer des menus...
Par Jos , 28 mars 2013 ·
OK j'ai compris : Novius OS n'a pas ce mécanisme. Il n'y a pas d'un côté les menus et de l'autre les templates, avec la possibilité de mettre les uns dans les autres. Dans Novius OS il n'y a que des templates.
Par exemple, de base, à l'installation Novius OS, il y a une applications templates_basic qui contient 2 templates : un avec menu vertical, l'autre horizontal. Ce sont 2 templates distincts même s'ils partagent une partie de leurs vues.

Pour créer un template, il suffit, dans une application, de déclarer le template dans le fichier confgi/metadata.config.php. Voir la doc en PJ.

Après je retiens l'idée du niveau Menu. On va étudier ça !
Par Gilles FELIX , 29 mars 2013 ·
D'accord, merci. Et pour créer un menu du coup on fait comment ? Parce que les versions de template_basic avec menu vertical et menu horizontal doivent bien servir à quelque chose ?
Par Jos , 29 mars 2013 ·
Pour créer un menu, tu dois déclarer un nouveau template, donc une vue principale intégrant ta vue de menu.
Désolé, c'est pour l'instant pas aussi puissant que WP :(
Par Gilles FELIX , 29 mars 2013 ·
D'accord, et donc le menu se crée automatiquement avec les variables PHP qu'on y intègre ?
Par Jos , 29 mars 2013 ·
Salut Jos,

Je pense qu'il y a encore un point sur lequel on ne se comprend pas.
Pour essayer d'avancer je vais essayer de d'écrire comment s'organise un template et son menu, en prenant comme exemple l'application noviusos_templates_basic.
Pour faire un nouveau template il suffit de la dupliquer, renommer, changer le namespace et le nom des clés définissant les templates.
Tu peux également simplement ajouter un 3ème template à noviusos_templates_basic.
Par Gilles FELIX , 31 mars 2013 ·

Comme je disais, le point de départ c'est le fichier metadata, et notamment la ligne définissant les différents templates (ligne 23) :

Si on regarde le premier template défini, 'noviusos_top_menu', on voit que sa vue est 'noviusos_templates_basic::top_menu'. Regardons cette vue

A la ligne 12 on remarque la récupération d'une variable config via la fonction \Nos\Templates\Basic\loadViewConfig(). Cette fonction renvoi visiblement un tableau et les éléments du tableau sont passés au différentes sous-vues. Cette fonction est dans le fichier bootstrap de l'application, fichier bootstrap qui est automatiquement chargé au chargement de l'application.

Le tableau renvoyer par est \Nos\Templates\Basic\loadViewConfig() récupérer dans le fichier de config template.config.php :

Pourquoi autant d'imbrication : la configuration du template peut être faite simplement en surchargeant la config. Dans le cas d'un template perso n'ayant pas vocation à être distribuer, c'est pas obligatoire.

Mais revenons à la vue de notre template, à la ligne 43, et l'appel à la sous-vue gérant le menu. On lui passe l'élément menu du tableau renvoyé par \Nos\Templates\Basic\loadViewConfig(), donc dans le cas par défaut (voir template.config.php)

array(
        'depth' => 2, // depth of the menu (1 = one level deep only, no sublevels)
        'idParent' => null // start level, null for root (default)
)

Dans la sous-vue menu.view.php, nous aurons donc 2 variables PHP définies :

  • $depth
  • $idParent

Avec ça la vue va construire un menu

Si on regarde la vue menu, on s’aperçoit que la $depth ne gère pas au-delà de 2.

A chaque niveau, une requête est faites sur le model Page, qui cherche toutes les sous-pages d'un page précise ayant leur flag menu à 1 et publiées. Au niveau 0, c'est page est null, la requête renverra donc la liste des pages à la racine.

Tout cela mériterait sans doute des mécanismes automatisés, du code mutualisé. En espérant que cela répond à au moins une partie de ta question.

En fait, ça répond même totalement ;)

Mais finalement ce qui m'inquiète, c'est qu'on a pas réellement de contrôle sur la création du menu, mis à part les niveaux. Ce qui me rappelle le fonctionnement des wiki, tandis que là on est sur une CMS.

Attention: je ne dis pas que c'est du mauvais design, mais c'est une base sur laquelle il reste du travail. L'avantage, c'est qu'on a pas besoin de se soucier de créer le menu car Novius le fait tout seul, mais dès qu'on veut pousser un peu, avoir une structure moins "conventionnelle", il faut se casser un peu la tête pour gérer les niveaux, voir se retrouver dans l'impossibilité de faire ce qu'on veut. En fait voilà, l'idée ce serait pas de construire son site en fonction de Novius, mais plutôt adapter Novius au site en création.

Une idée par exemple, pour créer des menus grâce au code: une structure de menu dans une template possèderait une succession de classes (.niv1, .niv2, .niv3... group1, group2, group3...) sur des DIV ou autres, puis dans chaque page on éditerait le code selon cette même structure, avec le contenu. Novius analyserait cette structure dans la page et comprendrait qu'il doit se rapporter à la template menu (qui possède ces classes dans sa structure) et adapterait la page en fonction.

Je sais pas si c'est optimal, mais lorsque j'ai essayé de bidouiller un peu la template menu c'est une idée qui m'est venue en me disant que ce serait pratique. Mais dans les faits?

Mais bon, dans l'idéal il faudrait trouver un système un peu similaire à WP, avec sa page de création de menus directement dans le back office... et avoir un CSS spécialement dédié au menu (ce qui manque à WP par ex.), qui permettrait de faire des trucs vraiment originaux et facilement (grâce à la gestion semi-automatique que Novius apporterait).
Par Jos , 2 avril 2013 ·
Salut Jos,

Merci de tes retours. On ne peut pas dire qu'on ai pensé complètement ce système de template. Il est l'héritage de pratiques antérieures à Novius OS. Autant les parties intégration des WYSIWYG, gestion du cache (des nouveautés dans la futures v0.2.1) a été réfléchies, autant les parties menus / sidebar / footer sont brutes de décoffrage et peuvent être grandement améliorer.

Tes remarques nous ont permis de pointer ce manque qui nous interpellait pas jusqu'ici.
Par Gilles FELIX , 3 avril 2013 ·
À
    ou Annuler
Utiliser les fonctions d'une vue dans une page ?
Par Jos , 25 mars 2013
À

Bonjour,

Alors voilà, je voudrais comprendre comment on exploite les fonctions ajoutées dans les vues à l'interieur d'une nouvelle page créée en backoffice. Pour être plus précis, voilà un exemple avec la template de base:

Mettons que j'ai ce code dans menu.view.php de mon template:

if (count($pages)) {

        ?>

        <ul class="nobullet" id="menu">

        <?php

        foreach ($pages as $p) {

            ?>

            <li class="lvl0"><a <?= $p->link() ?><?= $current == $p['id'] ? ' class="active"' : '' ?>><?= $p->pick('menu_title', 'title') ?></a>

            <?php

            if ($depth > 1) {

                $subpages = findPages($p['id']);

                if (count($subpages)) {

                    ?>

                    <ul class="nobullet submenu">

                    <?php

                    foreach ($subpages as $sp) {

                        ?>

                        <li class="lvl1"><a <?= $sp->link() ?><?= $current == $sp['id'] ? ' class="active"' : '' ?>><?= $sp->pick('menu_title', 'title') ?></a>

                        <?php

                    }

                    ?>

                    </ul>

                    <?php

                }

            }

            ?>

            </li>

            <?php

        }

        ?>

        </ul>

        <?php

}

Maintenant, je voudrais exploiter les fonctions sur une nouvelle page lorsque je crée un menu. Ma première pensée était de créer un menu avec la même structure (ul...) et les même classes et id (menu, lvl0...). Mais bon, ça ne semble pas être si simple.

Donc si quelqu'un peut me dire comment faire, car je n'ai pas trouvé de réponse dans la doc ni sur le forum.