Forum CMS Made Simple FR
Utilisation de createlink - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Général (https://forum.cmsmadesimple.fr/forum-10.html)
+--- Sujet : Utilisation de createlink (/thread-661.html)



Utilisation de createlink - versus68 - 13/09/2010

Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS: 1.8.2
#~ Nom de l'hébergeur : localhost
#~ Informations Système :
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~

Bonjour,

J'essaye de développer un module par moi-même (un simple CRUD). J'essaye de terminer le tutorial concernant le développement de module.

J'aimerais lister mes éléments et générer un lien cliquable pour avoir une vue sur le détail des éléments. Pour générer le lien, j'utilise createLink. Mais il y a certains paramètres que je ne sais pas comment remplir...

Code :
$list[$i]['url'] = $this->CreateLink('cntnt01', 'displayItem', $returnid, $row['name'],array('itemid' => $row['id']));

Le premier paramètre a mettre es tun id, j'ai mis 'cntnt01' car je l'ai trouvé sur un forum, sans conviction. A quoi sert cette ID ?
A quoi correspond returnid ?

Et enfin, pourquoi je n'arrive pas à récupérer le paramètres que je passe : itemid ?

Lorsque j'essaye de faire ça :
Code :
if($action == 'displayItem'){
     echo "on passe bien là";
        
     if (isset($params['itemid']){
          echo "mais on passe pas là!";
     }
}


Merci d'avance pr votre aide !


Utilisation de createlink - bess - 13/09/2010

salut versus68

la doc qui va t'être une bible : l'api de cmsms, et + précisement la doc de cette fonction : http://www.cmsmadesimple.org/api/class_cms_module.html#41eb0ceb35a9902845af261fa01564a5

ajoute la en marque page Smile

concrètement pour toi, a chaque fois que ton module a une page appelée depuis l'interface admin ou l'interface utilisateur, cmsms initialise certaines variables qui sont dès lors utilisables sans être re-déclarées dans ton code

une liste non exhaustive :

$id : l'identifiant unique représentant ton module
$params : tous les paramètres GET et POST issus de formulaire précédent l'appel de ta page
$returnid : l'id de la page appelée (et non appelante !)
$this : ton module, qui extends au passage la classe CmsModule et bénéficie donc des fonctions de celle ci, ce qui explique comment on peut faire appel à $this->CreateLink

voilà déjà dans un premier temps. Maintenant ta fonction : d'après la doc on sait que

Code :
CmsModule::CreateLink      (      $        id,
        $      action,
        $      returnid = '',
        $      contents = '',
        $      params = array(),
        $      warn_message = '',
        $      onlyhref = false,
        $      inline = false,
        $      addttext = '',
        $      targetcontentonly = false,
        $      prettyurl = ''    
    )            

Returns the xhtml equivalent of an href link This is basically a nice little wrapper to make sure that id's are placed in names and also that it's xhtml compliant.

Parameters:
        string     The id given to the module on execution
        string     The action that this form should do when the link is clicked
        string     The id to eventually return to when the module is finished it's task
        string     The text that will have to be clicked to follow the link
        string     An array of params that should be inlucded in the URL of the link. These should be in a $key=>$value format.
        string     Text to display in a javascript warning box. If they click no, the link is not followed by the browser.
        boolean     A flag to determine if only the href section should be returned
        boolean     A flag to determine if actions should be handled inline (no moduleinterface.php -- only works for frontend)
        string     Any additional text that should be added into the tag when rendered

concernant le code que tu as écrit on s'appercoit que ca colle pas des masses

Citation :$this->CreateLink('cntnt01', 'displayItem', $returnid, $row['name'],array('itemid' => $row['id']));

le premier paramètre est l'ID de ton module : prend l'habitude d'y insérer $id, on le connais, il n'a pas lieu de le définir à la mano ! Le seul cas ou tu devras spécifier à la main quelque chose sera le jour ou ton lien pointe vers un autre module, autant dire que ca va pas se faire dans la semaine Wink

Citation :$this->CreateLink($id, 'displayItem', $returnid, $row['name'],array('itemid' => $row['id']));

ce code suppose donc que le lien appel la page php : action.displayItem.php, rien de sorcier à ce niveau. Si tu veux rester sur la même page, retient que pour la page par défaut de l'admin c'est "defaultadmin" et que pour la page par défaut côté front office c'est "default" qu'il faudra mettre Smile

Citation :$this->CreateLink($id, 'displayItem', $returnid, $row['name'],array('itemid' => $row['id']));

ce petit paramètre étant l'ID de ta page actuelle, elle sera utilisé pour être transmis à la page suivante et ainsi faire un retour arrière si besoin vers notre page actuelle.


Citation :$this->CreateLink($id, 'displayItem', $returnid, $row['name'],array('itemid' => $row['id']));

le contenu affiché dans le lien : ici le contenu du tableau $row ayant la clé 'name', rien de complexe

Citation :$this->CreateLink($id, 'displayItem', $returnid,$row['name'], array('itemid' => $row['id']));

un tableau de paramètre, ici tu lui dit que le contenu du tableau $row ayant la clé 'id' sera passé en paramètre dans le lien du type action.displayItem.php?itemid=xxxx

Concernant ton second pb de paramètre pas passé, je ne sais pas quoi te dire : normalement ca devrait passer... par contre je suis étonné que tu utilises

Code :
if($action == 'displayItem')


j'imagine donc que ton erreur est de mettre ce code dans la même page que là ou tu as coder le reste alors qu'il devrait se trouver dans la page action.displayItem.php, et je dirais même plus qu'il ne devrait pas exister Wink

le code de action.displayItem.php devrait simplement se résumer à ceci

Code :
echo "on passe évidement bien là";
        
if (isset($params['itemid']){
  echo "et on va passer par ici aussi";
}


en bon codeur tu ferras également attention à quelques subtilités d'ordre sécu :


Code :
//Si la page est appelée de l'extérieur et que
// cmsms n'a rien initialisé : c'est un hack !
if (!isset($gCms)) exit;

// Éventuelle vérification de la permission
if (! $this->CheckPermission('Le nom de ma permission'))
  return $this->DisplayErrorPage($id, $params, $returnid,$this->Lang('accessdenied'));

//A partir d'ici c'est sécure :)

echo "on passe évidement bien là";
        
if (isset($params['itemid']){
  echo "et on va passer par ici aussi";
}



Utilisation de createlink - Jean le Chauve - 13/09/2010

Je bookmark Smile
Merci Bess


Utilisation de createlink - bess - 13/09/2010

je t'en prie, je suis en plein dedans ces jours ci pour la construction d'OSC Smile


Utilisation de createlink - versus68 - 14/09/2010

Merci pour ta réponse bien complète Bess !

Par contre, une autre chose curieuse que je n'avais pas remarqué hier parce que j'étais logger en tant qu'admin lorsque je débuggais, c'est que mon lien n'a pas du tout la bonne tête :

http://localhost/siteperso/cmsms/admin/moduleinterface.php?mact=Realisations,,displayRealisation,0&sp_=8d91815f&articleid=1

On voit les paramètres, même si ils sont vraiment pas très beau, mais par contre, la page appelé est moduleinterface.php ?!?

Kézako ?


Utilisation de createlink - bess - 14/09/2010

t'inquiète pas c'est tout à fait normal Smile

moduleinterface.php?mact=Realisations,,displayRealisation,0&sp_=8d91815f&articleid=1

#Fichier unique côté panel admin qui gère l'ensemble du back-office. C'est lui également qui initialise les variables et tout le reste
#Le nom du module géré : ici le tiens s'appel Realisations
#La page action php, ici action.displayRealisation.php
#l'ID de ta session admin, question de securité
# un paramètre passé via ton lien


Utilisation de createlink - versus68 - 14/09/2010

Ok. Par contre, du coup il demande de me logger. Et moi mon but, c'est de faire un affichage pour les utilisateurs non-enregistré, cela ne pose non plus pas de problème ?


Utilisation de createlink - bess - 14/09/2010

le front office doit toujours démarrer du fichier action.defaut.php

ton module doit être appelé depuis une page du front office du coup avec l'appel au tag {modulemanage name=""} (pas certain, c'est un tag dans le genre)

normalement la suite est automatique :/

en cas de doute, installe le module Skeleton, c'est un tutorial exceptionnel !


Utilisation de createlink - versus68 - 14/09/2010

Ok, je dois m'emméler les pinceaux... Je vais jeter un coup d'oeil au module skeleton, avec un exemple, ça doit être plus facile.

Merci beaucoup.


Utilisation de createlink - versus68 - 16/09/2010

J'ai finis de jeter un coup d'oeil au module Skeleton et cela m'a bien aidé à comprendre comment cela marchait !

J'ai plus de problème maintenant, mon CRUD marche bien comme je veux. Pour le souci de lien que j'avais, j'ai remarqué que quand on appelle des fonctions qui créée des liens dans les fichiers de type module.monmodule, on est redirigé sur moduleinterface. Si on utilise les mêmes fonctions dans les fichiers de type action.monaction, o arrive bien au bonne endroit.

En tout cas, merci à toi de m'avoir conseillé de jeter un coup d'oeil là dedans !