Wikini

Ex0DiscussionsActionInclude

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-18-219-227-189.us-east-2.compute.amazonaws.com

Documentation de WikiNi 0.4.1

L'action {{include page="PagePrincipale"}} (WikiNi >= 0.4.1) permet d'inclure dans une page une autre page du wiki (ici la page PagePrincipale). Cette action possède plusieurs applications :
c'est sans doute la manière la plus simple, la plus habile et la plus rapide de construire un menu que je connaisse ! Même hypercard ne faisait pas mieux !!--FidelioEspoir

Paramètres

Cette action accepte deux paramètres :

Actuellement, WikiNi intègre plusieurs classes prédéfinies pour gérer la mise en forme de l'inclusion :



  DocumentationActions ListeDesActionsWikiNi >>



Wikini propose par défaut les "Actions" suivantes.



Liens connexes :

Voir aussi :


  DocumentationActions ListeDesActionsWikiNi >>

Ces classes de style peuvent être employées cumulativement. Ainsi, si l'on souhaite obtenir, par exemple, une boite grise avec une bordure et de petits caractères, on employera :
{{include page="PagePrincipale" class="gray_background solid_border small_fonts"}}
L'inclusion par défaut, pour le moment, produit une présentation non différenciée par rapport au reste de la page ; il faut spécifier un style (comme en HTML classique), pour le voir appliqué. L'utilisation des classes de style doit faire l'objet d'une attention particulière, certains navigateurs ne supportant que peu ou pas les styles CSS.
La boite ci à droite correspond à l'inclusion suivante : {{include page="ListeDesActionsWikini" class="right height15em small_fonts solid_border gray_background"}}

Une page ne peut-être inclue dans elle-même : cela provoquerait une boucle récursive infinie : un page affichant une page, affichant une page, affichant une page, etc.
De même, les boucles d'inclusion portant sur plus d'une page, sont impossibles. Prenons par exemple : un page Page1 inclus une page Page2 qui inclus une page Page3? qui inclus la page Page1. Lorsque ont demande à afficher la page Page1, on voit le contenu des pages Page1, Page2 et Page3? et le message d'erreur indiquant qu'il est impossible d'inclure une page dans elle même. En effet, la page "active" est Page1 et le test dans l'action {{include}} regarde si le nom de la page inclus est le même que celui de la page active ce qui provoque une erreur car l'inclusion d'autres pages ne change pas la page active.
On verra cet exemple concrètement développé dans ActionIncludeExempleDeBouclePage1 et suivantes.

Il faut remercier GarfieldFr pour l'impulsion donné au développement de cette action.



  ListeDesActionsWikiNi ActionChangeStyle >>



Discussions


Problème lié à l'utilisation d'un include pour gérer l'interface utilisateur

Nous avons évoqué plus haut la possibilité d'employer l'action include pour laisser le contrôle de l'interface à l'utilisateur ; à ce titre, nous avons pris l'exemple du contrôle du menu de navigation grâce à un include : dans le fichier wakka.config.php, il suffit d'indiquer : "navigation_links" => "{{include page=\"MenuDuHaut\"}}",
Cette possibilité a un effet de bord un peu génant : lorsque l'on affiche la page source, MenuDuHaut dans notre exemple, un message d'erreur est affiché en lieu et place du menu : Impossible à une page de s'inclure dans elle même. Ce message est logique dans le cas d'un include d'une page dans corps même de sa propre page, mais il serait en revanche souhaitable que l'include fonctionne normalement lorsque l'include est réalisé en-dehors du corps de la page. (Suis-je clair ?)
Il existe une solution technique assez simple mais que je ne trouve pas très élégante : dans /handlers/page/show.php il suffit :

Dans /wakka.php : var $page;

Dans /handlers/page/show.php :
// display page


Dans /actions/include.php :
if (eregi("^".$incPageName."$",$this->GetPageTag?()) and $this->page = "1") {

(non testé)

Qu'en pensez-vous ? Voyez vous d'autres solutions ?
-- CharlesNepote

Je ne pense pas que ce soit utile de faire un test sur le fait que l'on soit dans le corp ou l'entête de la page simplement parce que la personne habilité à modifier le menu (ou toutes autre partie de l'interface) est l'administrateur du site et donc doit savoir ce qu'elle fait. Si la documentation de l'action indique que l'inclusion d'une page dans elle même est impossible, et bien le message d'erreur ne lui semblera pas anormal.
-- GarfieldFr


Vers une personnalisation poussée de WikiNi ?


On peut aussi améliorer cette action en ajoutant la possibilité de styler le code produit à l'aide du paramètre "style" : ce dernier permet d'entrer du code CSS de façon équivalente à l'attribut HTML "style" : exemple : {{include page="PagePrincipale" style="font-size: 9px;"}}

Cependant, il existe quelques problèmes de sécurité dus à l'attribut "style". J'ai posé la question dans la liste spécialisé CSS en français ; cf. le fil de discussion suivant :
http://fr.groups.yahoo.com/group/pompeurs/message/4085?threaded=1
Je vais voir comment il est possible d'intégrer l'attribut "style" en filtrant les propriétés CSS passées en paramètre.
-- CharlesNepote

Inclusion d'une page d'un autre WikiNi

Dans la page WikiNiSyndication, DavidDelon parle de recoder l'action include pour faire de la syndication. J'ai codé une telle action include. Maintenant, le nom de la page est soit un URL soit une page WikiNi local. Les syntaxe suivante sont donc valide :
Avec le changement de serveur arrive des problèmes de référence circulaire, cela est géré.
La seule chose qui ne soit pas gérée est le transfert des styles d'un serveur à l'autre, c'est à dire que si la page incluse provient d'un autre WikiNi et que cette page inclus elle même une page avec un certain style, l'affichage pourra être différent.
J'ai déjà testé les références circulaires, mais pas de manière exhaustive. Je n'est pas vérifié si droit de lecture était correctement vérifié, à priori oui car la méthode /raw vérifie les droits de lecture.
Voici le code de l'action pour teste : WikiNiSyndication
--GarfieldFr
Trés bien cette action, le codage de l'ancienne syndication ne me plaisait pas vraiment. Je teste tout cela (éventuellement à partir de la branche CVS de Test si on se met d'accord dessus). -- DavidDelon

Tout ce que je fais de "distribuable à mon avis" se retrouve dans le CVS TEST pour que vous puissiez le tester. Donc la modification de include pour le support de page externe au site est dans le CVS TEST. --GarfieldFr


NOTE


I have been trying to get the ActionInclude to work on the latest (0.1.2) Wakkawiki code. I copied the include.php from the 0.4.1 tar ball and drop it on the /actions directory. I added var $parameter = array(); to the wakka class and added the function GetParameter? as well. Still is not working, even though I am calling it {{include page="HomePage"}} it still says the parameter "page" is missing. Am I missing something? Thanks! --DavidCollantes (http://www.netbros.com/)

You did right in adding $parameter = array() and fonction GetParameter?() in wakka.php, but you should also make these changes in wakka.php near line 330 :

// prepare an array for extract() to work with (in $this->IncludeBuffered())
                        if (is_array($matches))
                        {
                                for ($a = 0; $a < count($matches); $a++)
                                {
                                        $vars[$matches[1][$a]] = $matches[2][$a];
                                        $this->parameter[$matches[1][$a]]=$matches[2][$a];

                                }
                        }
                }
                if (!$forceLinkTracking) $this->StopLinkTracking();
                $result = $this->IncludeBuffered(strtolower($action).".php", "<i>Unknown action \"$action\"</i>", $vars, $this->config["action_path"]);
                $this->StartLinkTracking();
                 if (isset($parameter)) unset($this->parameter[$parameter]);
                 unset($this->parameter);



Peut-on inclure une page d'un autre Wiki ?, d'un autre site ? --FidelioEspoir
Non, cela est impossible. Il s'agit d'inclusion de page WikiNi uniquement car la page incluse est soumise au formatage de Wikini et donc une page google ne peut pas être incluse. Par contre il doit etre possible d'ecrire une action du style {{includeURL URL="http://www.google.com/search?q=contrepeterie"}}. --GarfieldFr
Par contre, avec quelques modifications, il doit être possible d'inclure une page d'un autre WikiNi --GarfieldFr
Idée superbe : tout ce qui permet de densifier les mailles du réseau enrichit WikiNi --FidelioEspoir


Include, page d'aide et MultiWikiNi

Ta fonction est parfaite pour insérer une page constamment actualisée. Lorsque je propose d'ouvrir une nouvelle fenêtre, c'est dans l'optique d'un changement de registre : Texte et Aide sur le texte , Web et meta-Web. L'avantage d'une nouvelle fenêtre permet de ne pas mélanger les deux historiques. On peut ainsi consulter plusieurs pages d'aide tout en restant sur la page étudiée. On peut surtout rester sur la Page Sujet tout en lisant les pages SujetAvisdeX , SujetAvisdeXY ou sur les pages "SujetHier , "SujetDemain . Cela permet en quelque sorte de quitter le Wiki, ensemble linéaire de liens à une dimension, pour un MultiWikiNi. -- FidelioEspoir


Paramètre créant un bouton d'ouverture/fermeture du texte de l'include

Mais, pour te convaincre que je continue à adorer l'action "include", j'aimerais lui voir attacher une petite (!!??) action sous forme d'un bouton (!!???!!) : Fermer/ouvrir l'include. Clic et je lis le texte inséré, clic je le referme. Il suffit de (ah aha ah !) changer le style de l'include te dirait yakataka ! -- FidelioEspoir

Il faut voir : cf. http://www.meyerweb.com/eric/css/edge/popups/demo.html. Je trouve le challenge assez amusant, mais je ne vois pas encore beaucoup d'applications (des idées ?). -- CharlesNepote

Ce site est superbe d'intelligence que... je n'ai pas. J'utilise le css pour seulement changer les couleurs de mon site. Utiliser les CSS au lieu d'un javascript est certainement l'avenir pour le développeur. Mais j'écris toujours ici en tant qu'utilisateur. L'avantage d'une seconde fenêtre est de permettre de continuer à écrire sur une page, tout en continuant à lire l'autre. Mes remarques "informatiques" essayent de me faire mieux comprendre plus vite et surtout de vous convaincre que je partage vos difficultés de prog. Que tu y trouves aussi un plaisir, un amusant challenge me ravit au plus haut point !
En débutant mon site, j'avais mis à gauche une colonne menu permettant à chacun d'aller directement là où il le désire. (idée trouvée ici du côté de l'Afrique ;-) voir ContributionsAvancees ) . Cette solution s'avère éminemment utile pour des sites où les pages se suivent à la queue leu leu. Mon site utilisant une pléthore de liens entre pages, elle s'avère finalement moins nécessaire et surtout elle prenait de la place dans chaque page. J'ai bien essayé de la faire disparaître avec le fameux bouton clic-clac, jour-nuit, en dédoublant mes wakka.css (bleu, jaune vert, marron...) avec leurs sosies où la table-column deviendrait width=0, où le texte serait invisible...J'ai abouti à un carnage : tout était sens dessus dessous, et les liens invisibles fonctionnaient toujours...Je l'ai donc abandonnée au profit d'un include en première page. A moins qu'un malicieux s'empare d'un bouton magique et s'y amuse... tant mieux pour tous !! ;-) --FidelioEspoir

MenuDuHaut suite : création d'un menu personnalisé

Vous avez installé un menu "include". il est possible maintenant d'y ajouter une ligne "menupersonnel" :
Création d'une action menuutilisateur.php que l'on installe dans une page MenuUtilisateur
<?php
/*...
 licence GPL...
*/ 
if ($phrase $_REQUEST["phrase"])
{
    
$phrase trim($phrase);
    
$this->SetPersistentCookie("menu",$phrase,1);
    
$this->Redirect($this->href());
}
echo  
$this->FormOpen("""""get") ;
?>
<table border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td>NomWiki uniquement &nbsp;</td>
        <td><input name="phrase" size="40" value="<?php echo  htmlentities($this->Getcookie("menu")) ?>" /> <input type="submit" value="Menu choisi" /></td>
    </tr>
</table>
<?php echo  $this->FormClose(); ?>

puis dans header.php
....<?php echo  $this->config["navigation_links"] ? $this->Format($this->config["navigation_links"])." \n" "" ?> 
////
<br />  
<a href="<?php echo $this->config["base_url"]?> menuduhaut" ">Menu</a> : 
<?php
//pm
    
$menu htmlentities($_COOKIE["menu"]);
    
$menu explode(" ",$menu);
    
$menupersonel "";
    foreach (
$menu as $nom){
    
$menupersonel $menupersonel $this->Link($nom)." ";
    }
    
$menupersonel rtrim($menupersonel);
    if (!empty(
$menupersonel))  echo  $menupersonel 
?>
<br />
////
.....

et le menupersonel s'inscrit juste après le menuduhaut
Toute amélioration du script est fortement encouragée !
Chaque utillisateur enregistré ou non peut ainsi construire un menu contenant les cartes qu'il fréquente le plus. A l'usage, vous ne pourrez plus vous en passer ! 2004-05-22 -- 18 : 24 -- FidelioEspoir

Question: Pourquoi les images incluses dans une page pointée par un include ne sont pas visibles? StephaneCvr

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]