Forum CMS Made Simple FR
[Résolu]Fonction dans un module - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Modules, Tags (https://forum.cmsmadesimple.fr/forum-14.html)
+--- Sujet : [Résolu]Fonction dans un module (/thread-2835.html)



[Résolu]Fonction dans un module - fwa49300 - 09/07/2013

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: ?
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour,

Je développe actuellement mon module de gestionnaire de base de donnée pour mon client.(il ne veut pas de connexion à phpmyadmin).
J'ai réussi à faire un beau tableau, maintenant je dois ajouter mes fonctions : suppression d'une ligne, réinitialisation du mdp. Dans un premier temps, j'ai testé en php pur sans smarty, mes fonctions fonctionnent très bien.
Maintenant, je veux ajouter mes fonctions à MS.

Construction de mon module :

action.default.php :
<?php
// si l'accès ne provient pas du noyau de CmsMadeSimple, je refuse l'accès.
if (!isset($gCms)) exit;
$db=$gCms->GetDb();
$personnel = array ();
$results = $db->Execute('select id, opts,nom,prenomcontact,nomcontact from matable;');
while ($results && $row=$results->FetchRow())
{

$personnel[]=$row;

}

$smarty->assign('personnel',$personnel);
$count = $db->GetOne('select count(*) from matable');
$smarty->assign('usercount',$count);

echo $this->ProcessTemplate('tableaubdd.tpl');
?>


tableaubdd.tpl -> contient mon html

exemple du lien de suppression : <a href="javascriptConfuseduppression('q=Supprimer&id={$entry.id}')"><img src="{$rooturl}/modules/monmodule/images/delete.gif" title="Supprimer" alt="Supprimer"></a>



Je vois très bien ce qu'il faut faire en programmation (faire un GET de l'url)
mais ou je dois placer ma fonction supprimer?

<?php
if (!isset($gCms)) exit;
$db=$gCms->GetDb();

//Fonction supprimer

function Supprimer($id) {
$delete = $db->Execute("DELETE FROM matable WHERE".$id);
if ($delete == TRUE) {
echo "Les données ont été correctement effacées<br />";
} else {
echo "Erreur lors de la suppression des données<br />";
}
}
?>


Dans le tuto de Bess, j'ai vu qu'on faisait tout dans monmodule.module.php, je trouve pas ça très clair...Peut-on créer un fichier fonction.php ou l'on peut mettre toute nos fonctions concernant le module.


Merci d'avance pour vos réponses.


[Résolu]Fonction dans un module - bess - 09/07/2013

Il existe déjà des modules pour ce que tu veux faire il me semble... enfin pour répondre technique à ta question :

non dans mon tuto on ne met pas tout dans monmodule.module.php et encore heureux car comme tu dis c'est pas très clair :lol:

on fonctionne par norme.

Listons un peu tes actions possible :

list (mettons que c'est l'action par défaut)
détail
modification
suppression
ajout

et éventuellement réinit d'un mdp ce qui revient à une modif avec un formulaire un peu plus sexy.

Tu devrais donc avoir
action.defaultadmin.php => par défault la liste
action.detail.php
action.modification.php
action.suppression.php
action.ajout.php

et ...

action.save_modification.php
action.save_ajout.php

(si tu suis ma logique : les premiers modif/ajout seront des forms, les seconds valideront le SQL)


Ensuite exemple avec la suppression dans action.suppression.php

Code :
[== Indéfini ==]
<?php
if (!function_exists('cmsms')) exit;
$db=cmsms()->GetDb();


//On récupère le paramètre. /!\ id est un terme réservé donc on choisit autre chose
$sid = $params['sid'];

//Si tu as suivit mes tuto tu devrais comprendre ceci : c'est la seule façon correcte et sécurisée de procéder.
$sql = "DELETE FROM matable WHERE identifiant = ?";

if(!empty($sid)){
  if($db->Execute($sql, array($sid)) === TRUE){
    $params_retour = array("msg"=>"Les données ont été correctement effacées");
  } else {
    $params_retour = array("error"=>"Erreur lors de la suppression des données");
  }
} else {
   $params_retour = array("error"=>"identifiant vide");
}

//Dans tous les cas on revient sur la page d'admin par défaut avec $params_retour en paramètre.
$this->Redirect($id, 'defaultadmin', '', $params_retour);


?>


et voilà comment on navigue d'action en action en passant les paramètres nécessaire et en conservant son code propre Smile

Note :

Code :
[== Indéfini ==]
if (!function_exists('cmsms')) exit;
$db=cmsms()->GetDb();

à la place de ce que tu utilises Wink



Toute la doc : http://apidoc.cmsmadesimple.org/CMS/CMSModule.html


[Résolu]Fonction dans un module - fwa49300 - 10/07/2013

Merci beaucoup pour cette réponse, j'y voit un peu plus clair mais pas encore assez Smile

Je vais y aller par étape, ça sera plus compréhensible:

1- tableaubdd.tpl - Affichage d'une pop up lors du click sur l'image, voulez vous vraiment supprimer?

Mon javascript étant comme ceci :
<td><p class="imgtableau"><a href="javascriptConfuseduppression('q=supprimer&login={$entry.id}')"><img src="{$rooturl}/artelys/modules/Websecure/images/delete.gif" title="Supprimer" alt="Supprimer"></a></p></td>


2- Je récupère le mot "supprimer" et lance ma fonction (Ou mettre ce script ????). Est ce qu'il faut le modifier pour MS ?


if (isset ($_GET["q"])) {
$q = $_GET["q"];
}
elseif (isset ($_POST["q"])) {
$q = $_POST["q"];
} else {
$q = "";
}

switch ($q) {

case "supprimer";
echo "<div class=\"titrecorps\">Suppression d'une entrée de la table</div>";

//On lance la fonction supprimer() - comment appeler action.suppression.php ???? un include???

Supprimer("id=\"$_GET[id]\"");
?>
// REdirection vers la même page avec un message de réussite
<script language="Javascript">
window.location="<? echo "".$_SERVER["PHP_SELF"]."?msg=3"; ?>";
</script>
<?php break;

}

?>


Avec l'exemple que tu m'as donné : action.suppression.php. Est ce que je peux en faire une fonction.
fonction supprimer(){ le code de action.suppression.php}


Bref, je n'arrive pas à récupérer le "supprimer" dans mon url pour lancer action.suppression.php et je ne sais pas dans quelle fichier faire cette instruction...


Dans l'exemple que tu m'a donné :
//On récupère le paramètre. /!\ id est un terme réservé donc on choisit autre chose
$sid = $params['sid'];

Comment je fais pour voir ce que vaut $sid?

J'ai esssayé ça dans mon fichier monmodule.module.php-->

function DoAction($action, $id, $params, $returnid)
{
echo '<h1>'.$sid.'</h1>';
debug_display($params);
}
Résultat:

Array
(
[error] => identifiant vide
[action] => defaultadmin
)

Une fois que j'aurai réussi à mettre en place la fonction suppresdion, ça sera bcp plus simple. J'ai du mal à faire la transition php pur avec CMS MS

Merci pour ta réponse.


[Résolu]Fonction dans un module - jissey - 10/07/2013

Bonjour,
j'ai un peu lu en travers mais je pense qu'il faudrait que tu prennes exemple sur des modules existants et faire un parallèle avec les fonctionnalités de l'API. Cela te permettrait de mieux comprendre la logique.
Il y a aussi un très bon bouquin que nous conseillons toujours à ceux qui veulent développer leur propre module.
Je pense que si tu suis ces conseils, tu avanceras à grands pas et ça vaudra mieux qu'un cours à distance depuis le forum.


[Résolu]Fonction dans un module - bess - 10/07/2013

j'ai pas lu tout ton message, tu as faux au départ. En gros, oublie ton javascript. Il ne sert à rien.

tableaubdd.tpl devrait uniquement contenir un truc comme cela :


Code :
[== Indéfini ==]
<table>
{foreach $lignes as ligne}
<tr>
  <td>{$ligne->sid}</td>
  <td>{$ligne->val2}</td>
  <td>{$ligne->val3}</td>
  <td>{$ligne->val4}</td>
  <td>{$ligne->linkDelete}</td>
</tr>
{/foreach}
</table>

avec linkDelete, une valeur que tu auras préalablement calculée en amont dans le fichier php qui appel tableaubdd.tpl

un exemple de construction de linkDelete à faire dans une boucle évidement puisque chaque lien est propre à la ligne

/!\ id est comme j'ai dis une variable réservée, ici on va l'utiliser pour créer le lien. Idem pour returnId(*), ils sont dispo dans tous les fichiers php du front lié à cmsms

Code :
[== Indéfini ==]
$ligne->linkDelete = $this->CreateLink ($id, 'suppression', $returnid , 'supprimer', array('sid'=>999), 'Êtes vous sur???');

999 sera à remplacer par l'identifiant de chaque ligne.

le détail des paramètres : http://apidoc.cmsmadesimple.org/CMS/CMSModule.html#CreateLink

Si cela ne te parait par clair : prend mes derniers tuto de création de module, installe le et ouvre les fichiers
Dernier recours : installe le module Skeleton, c'est un module dédié pour la création des premiers modules. C'est donc clairement fait pour toi.

(*) dans notre cas il sera vide car uniquement lié au frontoffice, mais par habitude utilise le dans la création des liens