Taxonomies auswerten
am 22.07.2008 - 22:22 Uhr in
Ich möchte ein Taxonomy auswerten. Dabei soll der eingegebene Name einer bestimmten Kategorie mit bereits vorhandenen Taxonomies abgeglichen werden.
Wenn die Taxonomy bereits vorhanden ist, sollen bestimmte andere Felder automatisch mit den gleichen Werten gefüllt werden.
Beispiel zu Veranschaulichung:
Es gibt bereits 2 Nodes.
Die User müssen 2 Kategorien ausfüllen, die restlichen 6 sind freiwillig.
Bei einem Node wurden alle Taxonomys zugeordnet.
Nun erstellt ein zweiter User erneut ein Node, und in einer Kategorie wurde dasselbe eingegeben wie im oberen Node.
(Diese Kategorie sollte festgelegt sein, also nur wenn diese Kategorie übereinstimmt, sollen die restlichen Felder ausgefüllt werden.)
Dann sollen alle restlichen Felder mit demselben Inhalt gefüllt werden, als sie im ersten Node bereits eingegeben wurden.
Ich hoffe das ist vielleicht mit irgendeinem Modul möglich. Ich habe auf Anhieb kein passendes Modul gefunden, und wollte nicht jedes herunterladen und testen. Man weiß oft nie ob sich wirklich die passende Funktion ermöglichen lässt, da die Beschreibungen teilweise sehr ungenau sind.
Wenn mir also jemand n Tipp geben könnte, welches Modul passend wäre, oder jemand den "Code" kennt, mit dem man das bewerkstelligen kann, wäre ich echt dankbar!
- Anmelden oder Registrieren um Kommentare zu schreiben
Hat denn keiner ne Ahnung,
am 23.07.2008 - 23:11 Uhr
Hat denn keiner ne Ahnung, wie man das machen könnte? Dann muss ich mich wohl durch die tausenden Module durcharbeiten....(related...blah blah, taxonomys usw.)
suche in views und taxonomy
am 25.07.2008 - 23:09 Uhr
Hi,
du kannst auf drupal.org nach views und taxonomy suchen. Darüber gibt es bereits einige threads, z.B.:
http://groups.drupal.org/node/8500
http://drupal.org/node/54455
Damit kannst du einigermassen lernen, wie man auf die Taxonomie zugreift.
gruß, hermx
nee, ich will keine views
am 26.07.2008 - 09:32 Uhr
nee, ich will keine views erstellen. Sondern lieber eine Funktion im Template definieren.
Ich kenne mich leider mit der Programmierung vvon SQl usw. nicht so gut aus, aber ich weiß genau was die Funktion ungefähr machen sollte:
1. Alle vorhandenen Terms des Nodes "überprüfen" (taxonomy_get_vocabularies)
2. Datenbankabfrage machen ( db_query(db_rewrite_sql(");)
3. wenn ein Begriff eines festgelegten Vokabulars schon existiert
4. dann soll der entsprechende Wert automatisch in die entsprechende Tabelle des Nodes eingetragen werden
Das dürfte für jemanden der Ahnung von php und Drupal hat doch nicht so schwer sein, oder?
Wichtig ist halt, dass immer nur ein Vokabular überprüft wird, und alle Begriffe der anderen Vokabulare automatisch ergänzt werden.
Ein anderer Weg wäre auch noch dass die obige Funktion während dem Bearbeiten oder dem Erstellen des Nodes(also im Formular) ausgeführt wird. Ein Javascript könnte automatisch die anderen Felder mit den Werten füllen lassen. Man würde halt dann nicht direkt in die Datenbank etwas per Script schreiben, es wäre eher etwas wie Autocomplete der Felder, sodass das Gleiche dabei rauskommt.
Wahrscheinlich ist einiges davon nicht zumutbar, da es dem umfang eines neuen moduls entsprechen würde. Aber das Modul wäre gerade für Listen, Archive oder große Datenbanken bestimmt nützlich.
Vielleicht gibt es ja jemanden der sich mit Modul Entwicklung auskennt, und dem die Idee eines solchen Moduls gefällt...
Folgende Funktionen scheinen für mich "in die richtige Richtung" zu gehen:
function your_function($nid) {
$vocabularies = taxonomy_get_vocabularies();
foreach($vocabularies as $vocabulary) {
if ($vocabularies) {
$terms = taxonomy_node_get_terms_by_vocabulary($nid, $vocabulary->vid);
if ($terms) {
$links = array();
$output .= ' ' . $term->name . '' ;
$output .= ' taxonomy-tid-' . $term->tid . ' ';
foreach ($terms as $term) {
$links[] = l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => strip_tags($term->description)));
}
}
}
}
return $output;
}
Bei dieser Funktion werden die Taxonomys einzeln ausgegeben. Nun müsste man den Code nur noch so verändern, dass nichts ausgegeben wird, sondern die Werte in der Datenbank verändert werden.
Und halt noch dass man die Datenbank nach demselben Begriff innerhalb eines Vokabulars durchsucht, und wenn ein gleicher Begriff gefunden wird, werden die Werte in der Datenbank verändert.
Also um beim abspeichern die
am 26.07.2008 - 09:38 Uhr
Also um beim abspeichern die Werte zu kontrollieren und ggf. zusätzliche Werte zu speichern kannst du hook_nodeapi() nutzen. => http://api.drupal.org (z.B. Module system (Drupal hooks))
Für on the Fly bearbeitungen kannst Du Dir entweder das von Drupal angebotene Autocomplete-Feld zu nutze machen, oder mit dem Zusatzmodul ActiveSelect experimentieren.
Für ersteres findest Du auch in der API unter Forms API Reference die erforderlichen Werte zum einstellen.
Für zweiteres musst Du in der ActiveSelect-ReadMe nachsehen, dort ist auch soweit ich weiß ein Beispiel angegeben.
Vorm anzeigen eines Formular kannst Du dies zudem grundsätzlich per hook_form_alter() ändern.
Das ist ja nett gemeint,
am 28.07.2008 - 08:39 Uhr
Das ist ja nett gemeint, aber ich blicke in der Api ehrlich gesagt nicht durch:
<?php
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'submit':
if ($node->nid && $node->moderate) {
// Reset votes when node is updated:
$node->score = 0;
$node->users = '';
$node->votes = 0;
}
break;
case 'insert':
case 'update':
if ($node->moderate && user_access('access submission queue')) {
drupal_set_message(t('The post is queued for approval'));
}
elseif ($node->moderate) {
drupal_set_message(t('The post is queued for approval. The editors will decide whether it should be published.'));
}
break;
case 'view':
$node->content['my_additional_field'] = array(
'#value' => theme('mymodule_my_additional_field', $additional_field),
'#weight' => 10,
);
break;
}
}
?>
Was genau muss ich jetzt mit diesem Code machen? Wenn ich ihn in die Template Datei mache, kommt die Fehlermeldung dass die Funktion nicht neu definiert werden kann(redeclare)...
Ein hook ist eine Funktion
am 28.07.2008 - 17:53 Uhr
Ein hook ist eine Funktion die durch jedes Modul ergänz werden kann. Dies geschieht indem man "hook" durch den Modulnamen ersetzt und dies dann in die .module-Datei des eigenen Moduls schreibt. Deine Function müsste somit z.B. mymodule_nodeapi() heißen.
Ein Beispiel genau hierzu ist in der API unter "How to extend existing content types" zu finden.