J'avais bien compris que tu recherchais un systeme de PA et d'Annuaire

J'aurai aimé avoir plus d'informations sur tes besoins concernant ces modules.
Si le but est de réaliser un site où chaque visiteur aurait la possibilité de laisser leur contribution, et pour faire simple tu pourrais suivre cette démarche :
1. Créé un groupe d'utilisateurs web 'membres'
2. Créer un répertoire MODx pour stocker les annonces laissées par les visiteurs.
3. Créer une page MODx et lui attribuer un accès restreint sur le groupe d'utilisateurs 'membres'. Cette page servira aux personnes enregistrées d'ajouter des annonces. On y place ce snippet :
[!petitesAnnonces? &tplContener=`petitesAnnonces` &parent=`XX` !]
Où parent est l'ID du répertoire créé en 2.
3. Créer le snippet 'petitesAnnonces' :
<?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;
?>
4. Créer le chunck 'petitesAnnonces' :
[+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>
6. Créer le snippet traitementAnnonces
<?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('toto@dns.world', '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;
}
Je te garantis pas que tout fonctionne en l'état, je t'ai lancé une piste, à ton tour de jouer, et d'adapter cette méthode pour faire tes deux modules.
Le principe de fonctionnement est à peu près le même pour faire des PA, un FAQ, ou tout autre type de documents sans devoir pour autant donner les clefs du manager.
@+