Form (Button) in einem View anzeigen
am 27.11.2012 - 09:47 Uhr in
hallo,
auf meiner Internetseite motorrad-vergleichen (noch im Aufbau) benutze ich ein Properties-Compare Modul (Dynamic Properties), womit man über den Button "zum Vergleichliste" ein Item (Motorrad) zu Vergleichliste einfügen kann. Diesen Button schalte ich für Teaser-Ansicht oder große Ansicht ganz normal in Inhaltstypen>Anzeige verwalten, wo ich den ein- oder ausschalten kann. (Gibt das Module wahrscheinlich selber her).
Jetzt möchte ich aber die Seite mit VIEWS ein wenig erweitern. Als Ergebnis einer Suche sollten nicht mehr die aufgelistete Teasers kommen (wie jetzt momentan, wenn man z.B auf einen Hersteller im Menü klickt), sondern angepasste Views mit von mir definierten Felder. Das kann ich auch machen, ist kein Problem, aber was ich nicht in View einfügen kann, ist eben dieser "zum Vergleichliste" -Button.
Dies ist eine Funktion, die aus dem Dynamic Properties -Modul eine Form aufruft. Funktionen des Moduls
Ich vermute, dies könnte diese Funktion sein: properties_compare_list_add
/**
* Add a new entity to the compare list.
*
* @param $entity_type
* Type of entity, for example node or comment.
* @param $entity
* Entity object.
*/
function properties_compare_list_add($entity_type, $entity) {
$list = &properties_compare_list();
list($id, , ) = entity_extract_ids($entity_type, $entity);
$list[properties_compare_create_key($entity_type, $entity)] = array(
'entity_type' => $entity_type,
'entity_id' => $id,
);
}Wie baue ich Aufruf von diese Funktion in mein View? Oder Allgemein, (für Anfang vielleicht noch besser), wie ruf ich so eine externe Funktion aus einem "Custom-Code", z.B. passende block.tpl.php oder node.tpl.php
Vielen Dank
(ich habe mich vor 2 Jahren richtig intensiv mit Drupal beschäftigt und damals wäre es vielleicht nicht so schwer für mich das zu verstehen, aber jetzt als Wiedereinsteiger muss ich fast alles von vorne lernen...)
- Anmelden oder Registrieren um Kommentare zu schreiben

Das ist nicht so einfach,
am 27.11.2012 - 10:30 Uhr
Das ist nicht so einfach, denn dann müßtest Du Dir genau ansehen, welche Funktion des Button aufruft, um darüber einzusteigen. Es gibt aber eine einfachere Möglichkeit und das ist die [do:ds Display Suite]. Dort kannst Du weiter "View-Modes" neben Teaser und Full View definieren, die genau die Felder ausgeben, die Du möchtest. Die kannst Du auch in Views ausgeben statt Teaser. Also kannst Du damit auch Deinen Button bekommen, ohne daß Du dich um Code kümmern mußt.
Beste Grüße
Werner
danke für Reply, ich wollte
am 27.11.2012 - 15:57 Uhr
danke für Reply,
ich wollte direkt in einem Test-Node folgendes ausprobieren und auf diesem Weg den Button (Form) aufrufen:
<?php print drupal_render(drupal_get_form('properties_compare_list_add')); ?>aber das geht leider nicht, bekomme Fehlermeldung zurück...
suche weiter....
Properties_compare_list_add
am 27.11.2012 - 16:50 Uhr
Properties_compare_list_add ist ja auch keine Form. Also kann das deshalb nicht gehen. Im übrigen ist der Aufruf von Funktionen aus nicht Core-Modulen mitunter etwas tricky.
Beste Grüße
Werner
hallo, ich habe jetzt die
am 27.11.2012 - 17:15 Uhr
hallo,
ich habe jetzt die richtige Funktion gefunden, das ist diese funktion:
/*** Form builder function; displays a form to add an entity to the compare list.
*/
function properties_compare_add_form($form, &$form_state, $entity_type, $entity) {
$form['entity_type'] = array(
'#type' => 'value',
'#value' => $entity_type,
);
$form['entity'] = array(
'#type' => 'value',
'#value' => $entity,
);
$exists = properties_compare_list_exists($entity_type, $entity);
$full = properties_compare_list_is_full();
$form['submit'] = array(
'#type' => 'submit',
'#disabled' => $exists || $full,
'#value' => $exists ? t('In comparison') : ($full ? t('Comparison list full') : t('Add to compare list')),
);
return $form;
}
so, wenn ich in meiner test.tpl.php diese Funktion so aufrufe:
<div class="teaser-test"><?php print drupal_render(drupal_get_form('properties_compare_add_form')); ?></div>bekomme ich White Screen mit folgendem Fehler:
Fatal error: Class name must be a valid object or a string in /...../includes/common.inc on line 7679
Im übrigen ist der Aufruf von Funktionen aus nicht Core-Modulen mitunter etwas trickyja, das ist mir bewusst, aber an diesem Modul setzt fast meine ganze Internetseite. (ja ich weiß dass dies suboptimal, aber...... damals hatte ich keine andere Lösung)
Wenn es mir geling, diese Funktion
properties_compare_add_form($form, &$form_state, $entity_type, $entity)sauber aus meinem Test-Node aufzurufen, dann werde ich es auch wahrscheinlich in ein Custom-Modul einpflegen.....jetzt hänge ich noch da.. Wie ruf ich diese Funktion sauber auf, somit der Button richtig dargestellt wird? Ich vermute, da fehlen mir noch einige Parameter die ich dazuhängen sollte.....
Du siehst doch, daß die
am 27.11.2012 - 20:22 Uhr
Du siehst doch, daß die Form-Funktion weitere Parameter benötigt. Die gibst Du aber nicht mit. Also mußt Du die Quellen dieses Moduls genauer studieren, und sehen, wo diese Form aufgerufen wird, und wie und woher dort die Parameter geliefert werden.
Beste Grüße
Werner
ja, ich sehe das
am 28.11.2012 - 08:53 Uhr
ja, ich sehe das
($entity_type, $entity)und habe auch schon etwas testweise abgegeben.Aber leider noch nicht richtig... muss ich wohl weiter suchen
falls jemand Tipp hat....... wäre sehr dankbar.
phuuuu....... es ist schon richtig schwierig wieder neu anzufangen nach so viel Zeit mit Drupal. Vielleicht sogar schwieriger als Neuanfang. Als reiner Neuanfänger weißt man das was man eben weiß und tut nicht weh wenn man etwas nicht findet. Aber als Wiedereinsteiger..... man weiß dass es irgendwie geht .... aber wie war das nochmal... :-)
Gruß aus Schwarzwald
ich glaube, ($entity) ist ein
am 28.11.2012 - 10:00 Uhr
ich glaube, ($entity) ist ein Objekt. Ich finde aber keinen Weg, woher könnte ich dieses Objekt holen und in den Funktion-Aufrug einbauen.
sche.....e, ist doch
am 28.11.2012 - 14:21 Uhr
sche.....e,
ist doch wirklich nicht so einfach.....
DS mag ich nicht verwenden, ist doch ein Overkill, das ganze für nur ein Funktionsaufruf in einem View.....