Prepopulate
Prepopulate ist ein sehr hilfreiches Modul, wenn man mit eigenen Node-templates arbeitet.
Es ermöglicht das Vorbelegen von Formularfeldern per URL.
Beispiel:
Im Node-Template eines Inhaltstyps "Projekt" wird eine View mit einer Auflistung von diesem Projekt zugewiesenen Aufgaben angezeigt. Darunter ein Link "Aufgabe hinzufügen".
Bei Klicken auf diesen Link wird das Eingabeformular für eine neue Aufgabe geöffnet.
Prepopulate ermöglicht es nun, Felder vorzubelegen, z.B. das Node-Referenz-Feld "Projekt", so dass es nicht mehr extra ausgewählt werden muss.
Der Link im entsprechenden Node-template kann dann so aussehen:
<a href="?q=node/add/projekt&edit[projekt][nid]=<?php print $node->field_projekt[0][nid]; ">Rechnung hinzufügen</a>
Wichtig sind die exakten Feld-Bezeichnungen.
Weitere Nutzungsbeispiele:
Mit Taxonomie
Usern die Möglichkeit geben, an einer bestimmten Stelle eine neue Seite hinzuzufügen, nach dem Schema "Zu diesem Begriff einen neuen Beitrag schreiben". Ich benutze hierfür ein freetagging Vokabular, das macht es einfacher. Der folgende Code kommt in einen Block, der automatisch nur auf Taxonomieseiten angezeigt wird.
<?php
$CHfilter = "tax"; //e.g. only display for paths starting with "tax" such as /taxonomy/
$i = 0;
// get last path argument and store in $termid
while (arg($i) <> ""):
$termid = arg($i);
// print $termid."<br />"; un-comment to see list of arguments received for this page
$i++;
if ($i >= 20) $i = 0; // avoid infite loops
endwhile;
// restrict output to relevant screens
if (substr(arg(0), 0, strlen($CHfilter)) == $CHfilter) {
// restrict output to when the last ARG is numeric i.e. likely to be a taxonomy term
if (is_numeric($termid)) {
// fetch term data, especially the vocabulary id
$termdata = db_query("SELECT term_data.name, term_data.vid FROM term_data WHERE term_data.tid=$termid");
// create link to autopopulate taxonomy using PREPOPULATE module compatible URL
while ($term = db_fetch_object($termdata)) {
print '<a href="/grt/node/add/story?edit[taxonomy][tags]['.$term->vid.']='.$term->name.'" >Neuen Beitrag schreiben</a>';
}
}
}
?>
Die letzte Zeile <a href="/grt/node/add/story?edit[taxonomy][tags]['.$term->vid.']='.$term->name.'" >Neuen Beitrag schreiben</a>
ist die, wo die Argumente für Prepopulate stehen. ['.$term->vid.']
findet die ID des aktuellen Begriffs und '.$term->name.'
gibt den Namen des Begriffs über prepopulate in das freetagging-Feld. Mit dem Zusatzmodul Formfilter kann das Taxonomieauswahlfeld für Benutzer ausgeblendet werden, es funktioniert dann trotzdem. Diese Variante der Begriffszuweisung macht natürlich nur Sinn, wenn einem Beitrag nur ein Begriff zugewiesen werden soll.
- Anmelden oder Registrieren um Kommentare zu schreiben
prepolulate
am 31.01.2011 - 13:27 Uhr
Alos bei mir funktioniert der code leider nicht - obwohl meines Erachtens der Code vollkommen korrekt aufgebaut wird, und auch die richtigen Parameter übergeben werden, passiert beim neu erstellen des nodes mit der taxonomy dropdown rein gar nix.
Bitte um Hilfe.
Gracias - willi
willi
so mal kurz zu prepopulate
am 23.02.2011 - 09:00 Uhr
so mal kurz zu prepopulate und Taxonomy
beim core taxonomy field sieht die syntax so aus
if (node_access("create", "opinion"))
{
print '<li class="node_read_more first last">';
print '<a title="Neue Meinung" href="/node/add/opinion?edit[taxonomy]['. $taxonomy_term->vid .']='. $taxonomy_term->tid .'" >Neue Meinung</a>';
print '</li>';
};
und beim cck content_taxonomy so:
if (node_access("create", "opinion"))
{
print '<li class="links">';
print '<a title="Neue Meinung" href="/node/add/opinion?edit[field_content_taxonomy][value]=' . $taxonomy_term->tid .'" >Neue Meinung</a>';
print '</li>';
};
warum content_taxonomy?
Also Ziel meiner Aktion ist es das Erstellen von Beiträgen nur durch anklicken eines Buttons innerhalb der Taxonomie hierarchie zu ermöglichen. Das Problem ist dass bei der normalen Taxonomie der User beim Erstellen das Feld jederzeit ändern kann bei einem CCK Feld aber die Vergabe von Feldrechten möglich ist und das Feld somit vor dem User versteckt werden kann.
willi