

Modx est très simple pour développer de nouvelles ressources. C’est du PHP classique avec la possibilité d’utiliser l’API de Modx. Il y a des infos à ce sujet sur la page documentation et sur le wiki.
Bonjour,
Macspyre : as-tu finalement développé ces ressources ? Le cas échéant, comment t’en es-tu sorti ?
Un client me demande de réaliser sur son site un système de petites annonces ainsi qu’un annuaire et je n’ai rien trouvé de tout près pour ModX.
Si toi ou un autre forumeur a un tuyau, c’est pas de refus

[!petitesAnnonces? &tplContener=`petitesAnnonces` &parent=`XX` !]
<?php
// ---------------------------------------------------
// initialisation des variables locales du snippet
// ---------------------------------------------------
global $modx;
$out = '';
$idPage = 0;
$idTheme = 0;
// ---------------------------------------------------
// recuperer les prametres du Snippet
// ---------------------------------------------------
$tplContener = isset($tplContener)? $modx->getChunk($tplContener): 'le parametre &$tplContener est maquant (un chunk est obligatoire)';
$parent = isset($parent)? $parent: 0;
// ---------------------------------------------------
// recuperer les champs du formulaire
// ---------------------------------------------------
$idPage = isset($_POST['idPage']) ? $_POST['idPage'] : 0;
$idTheme = isset($_POST['idTheme']) ? $_POST['idTheme'] : 0;
if($idTheme<=0){
// first child of parent redirect
if($parent) {
$firstChild = array();
$children= $modx->getActiveChildren($parent, 'menuindex', 'ASC');
if (!$children === false) {
$firstChild= $children[0];
$idTheme = $firstChild['id'];
$_POST['idTheme'] = $idTheme;
}
}
}
/**
* action à réaliser.
*/
$out = $tplContener;
$snippet1 = $modx->runSnippet('traitementAnnonces',array('tplContener'=>'petitesAnnonces','parent'=>$parent));
$out = str_replace("[+snippet1+]",$snippet1,$out);
return $out;
?>
[+confirmation+]
<form method="post" name="messagefrm" enctype="multipart/form-data" action="[~[*id*]~]" >
<div>
<p>
<label for="nom">Votre nom :</label><br/>
<input id="nom" name="[+longtitle+]" type="text" maxlength="255" size="60" value="[+longtitleValue+]" />
</p>
<p>
<label for="email">Votre eMail :</label><br/>
<input id="email" name="[+description+]" type="text" maxlength="255" size="60" value="[+descriptionValue+]" />
</p>
<p>
<label for="departement">Votre departement :</label><br/>
<input id="departement" name="[+menutitle+]" type="text" maxlength="2" size="2" value="[+menutitleValue+]" />
</p>
</div>
<div>
<p>
<label for="chargerTheme">Catégorie :</label><br/>
[+SELECT_THEMES+]
</p>
<p>
<label for="[+pagetitle+]">Titre :</label><br/>
<input id="[+pagetitle+]" name="[+pagetitle+]" type="text" maxlength="255" size="60" value="[+pagetitleValue+]" />
</p>
<p>
<label for="[+content+]">Votre Annonce :</label><br/>
<textarea name="[+content+]" id="[+content+]" class="inputBox" rows="10" cols="60">[+contentValue+]</textarea>
</p>
<input name="[+action+]" type="hidden" value="" /> <input name="idPage" type="hidden" value="[+idPage+]" />
<input name="idTheme" type="hidden" value="[+idTheme+]" />
<input type="button" value="[+CREA_UPDATE_NAME+]" onclick="postForm('[+CREA_UPDATE+]'); return false;" />
</div>
</form>
<?php
global $modx;
// ---------------------------------------------------
// initialisation des variables locales du snippet
// ---------------------------------------------------
$out = '';
$idPage = 0;
$action = '';
$pagetitle = '';
$longtitle = '';
$description = '';
$alias = '';
$link_attributes = '';
$introtext = '';
$menutitle = '';
$content = '';
$published = 1;
$hidemenu = 0;
$idTheme = 0;
$confirmation = '';
$tplContener = isset($tplContener)? $modx->getChunk($tplContener);
// ---------------------------------------------------
// recuperer les champs du formulaire
// ---------------------------------------------------
$idPage = isset($_POST['idPage']) ? $_POST['idPage'] : 0;
$action = isset($_POST[$prefixe.'opcode']) ? $_POST[$prefixe.'opcode'] : '';
$pagetitle = isset($_POST[$prefixe.'pagetitle']) ? $_POST[$prefixe.'pagetitle'] : '';
$longtitle = isset($_POST[$prefixe.'longtitle']) ? $_POST[$prefixe.'longtitle'] : '';
$description = isset($_POST[$prefixe.'description']) ? $_POST[$prefixe.'description'] : '';
$alias = isset($_POST[$prefixe.'alias']) ? $_POST[$prefixe.'alias'] : '';
$link_attributes = isset($_POST[$prefixe.'link_attributes']) ? $_POST[$prefixe.'link_attributes'] : '';
$introtext = isset($_POST[$prefixe.'introtext']) ? $_POST[$prefixe.'introtext'] : '';
$menutitle = isset($_POST[$prefixe.'menutitle']) ? $_POST[$prefixe.'menutitle'] : '';
$content = isset($_POST[$prefixe.'content']) ? nl2br($_POST[$prefixe.'content']) : '';
$published = isset($_POST[$prefixe.'published']) ? $_POST[$prefixe.'published'] : '';
$hidemenu = isset($_POST[$prefixe.'hidemenu']) ? $_POST[$prefixe.'hidemenu'] : '';
$idTheme = isset($_POST['idTheme']) ? $_POST['idTheme'] : 0;
?>
/**
* selon l'action
*/
switch($action) {
case 'create':
$doc = new Document($idPage,'pagetitle,longtitle,description,alias,link_attributes,introtext,menutitle,content,published,hidemenu,parent,privateweb,pub_date,unpub_date,template');
$doc->Set('pagetitle',$pagetitle);
$doc->Set('longtitle',$longtitle);
$doc->Set('description',$description);
$doc->Set('alias',$alias);
$doc->Set('link_attributes',$link_attributes);
$doc->Set('introtext',$introtext);
$doc->Set('menutitle',$menutitle);
$doc->Set('content',$content);
$doc->Set('published',0);
$doc->Set('hidemenu',0);
$doc->Set('parent',$idTheme);
$doc->Set('privateweb',1);
$doc->Set('pub_date',time());
$unmois = time() + (30 * 24 * 60 * 60);
$doc->Set('unpub_date',$unmois);
$doc->Set('template',1); // Mettre ici l'id du template a afficher
$doc->Save();
mail('[email protected]', 'nouvelle annonce' ,"une annonce vient d'être posté, id : ".$doc->Get('id')." " , "From: ".$description);
$idPage = 0;
$action = '';
$pagetitle = '';
$longtitle = '';
$description = '';
$alias = '';
$link_attributes = '';
$introtext = '';
$menutitle = '';
$content = '';
$published = 0;
$hidemenu = 0;
$idTheme = 0;
$confirmation = 'Votre annonce a bien été enregistrée , elle sera publiée après validation.';
break;
default :
break;
}