Eigenes Feld erstellen
am 19.02.2009 - 11:03 Uhr in
Hallo !
Ich bin eine Seminarverwaltung mithilfe von Event Manager,Signup, Views und CCK am erstellen.
Ich lasse mir mit Views eine Tabelle anzeigen in der alle bisher veröffentlichten Seminare aufgelistet werden. Der Benutzer kann sich die angezeigten Seminare nach Startjahr/Startmonat/ Filtern und sortieren lassen.
Des Weiteren habe ich mir ein Skript geschrieben das dem Benutzer auf der Seminarbeschreibung(=node) die belegung anzeigt (Anzahl der max. Teilnehmer und noch verfügbare Plätze). Die noch freien Plätze lasse ich mir in der MySQL Datenbank speichern und zwar in folgender Form:
---------------------
nid | anzahlderplaetze
32 10
33 24
etc...
Nun möchte ich ein Feld "Verfügbare Plätze" zu meiner Tabelle hinzufügen die sich die Daten aus der DB holt.
Ich habe bereits ein CCK-Feld erstellt und das in Views "eingefügt", jedoch bleibt meine Spalte leer.
Hoffe es kann mir jemand helfen und bitte nicht hauen wenn es bereits einen Fred dazu gibt. Ich habe nur Anleitungen gefunden bei denen die Daten vorher vom Benutzer eingegeben wurden, aber nirgends eine wo sich das Feld seine Daten aus der DB nimmt.
P.S.: Ich weiß, dass es noch ein Problem bei der zuordnung der Plätze bei Views1 gibt, jedoch werde ich mich im Nachhinein darum kümmern ;) Bei Drupal6 kann man das Problem umgehen, jedoch gibt es das Event Manager Modul noch nicht für Drupal 6 :)
- Anmelden oder Registrieren um Kommentare zu schreiben
Vorschlag
am 20.02.2009 - 11:10 Uhr
Wenn ich mit CCK ein neue Feld erstelle, habe ich ja die Möglichkeit PHP-Code hinzuzufügen. Soll ich dort einfach ne mysql_query einfügen ? ( SELECT anzahl FROM belegung WHERE nid = $node->nid; )
Ich habe es testweise mal so ausprobiert, wenn ich mit phpmyadmin nachschaue wo mein Feld "liegengeblieben" ;) ist, wird es unter "content_type_event" aufgefüht. Es "verweist" auf die Felder "field_teilnehmer_uid" und "field_belegung_value".
Von daher würde ich spontan sagen ich habe den falschen Ansatz und es wird nicht mit CCK+Views funzen.
Hat jemand eine andere Idee wie ich meine Belegung in der Tabelle anzeigen kann ? ( evtl. als view-seminarübersicht.tpl.php und dort die Tabelle "eigenhändig" coden ?).
Allgemeine Frage
am 24.02.2009 - 11:45 Uhr
Ist mein Vorhaben überhaupt möglich ? Habe gedacht ich wäre an einer Kleinigkeit hängen geblieben, aber anscheinend gibts mehr Probleme wie ich dachte (oder noch niemand hat so etwas bisher probiert, glaube ich aber nicht :p).
Deswegen nocheinmal meine Frage: Ist so etwas prinzipiell möglich ohne gleich ein Modul zu schreiben ? (Ja/Nein/Vielleicht mit kurzer begründung reicht, hauptsache es antwortet jemand :D).
signup
am 24.02.2009 - 12:04 Uhr
Mal ganz ohne jetzt auf die Möglichkeiten einzugehen: signup bietet bereits die Möglichkeit, verfügbare Plätze und Restplätze zu speichern und anzuzeigen. Zusätzlich kann dort auch noch verwaltet/angezeigt werden, ob der Nutzer wirklich teilgenommen hat.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Bin ich blind ?
am 24.02.2009 - 14:10 Uhr
Danke für die Antwort.
Es würde mich sehr wundern wenn ich diese Funktion übersehen habe, da ich seit mehreren Stunden diese Option suche und mir bereits das Skript geschrieben habe. Nichtsdestotrotz möchte ich das natürlich nicht ausschließen ;) Deswegen: kannst du mir sagen wo ich die noch freien Plätze sehe und zwar mit einer Erklärung für absolute DAU's ? Denn die einzigen Felder die ich sehe, ist "Limit" und "Total" (also verfügbare Plätze und bereits angemeldete Benutzer).
Vielleicht verwechselst du aber Signup 6.x 1.0 mit 5.x 2.7 (ich kenne nur 2.7 da ich D5 benutze). Selbst unter phpmyadmin kann ich keinen Vermerk dazu finden.
view
am 24.02.2009 - 14:54 Uhr
So direkt ist das natürlich nicht enthalten (wäre ja auch redundant, da berechneter Wert).
Du kannst aber im view-Template ganz einfach
$limit - $total
ausgeben lassen, so dass Du dort die Anzahl der noch verfügbaren Plätze hast. Ob jetzt das Feature "attend" auch in Version 5.x-2.7 enthalten ist, weiss ich jetzt so nicht.Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Für mich nicht ganz einfach :p
am 24.02.2009 - 16:21 Uhr
Ich habe in modules/signup/views/views.inc folgendes array hinzugefügt:
'anzahl' => array(
'name' => t('Anzahl der verf. Plätze'),
'sortable' => TRUE,
'option' => 'integer',
'value' => '20',
),
aber es tut sich leider rein gar nichts (value ist einfach nur testweise da).
Um ehrlich zu sein versteh ich deine Antwort auch kaum. Was meinst du mit "attend" ?
Dein Vorschlag mit $limit - $total klingt logisch, aber es gibt einen Haken: es gibt kein $total als Variable/DBeintrag. Die Anzahl der bisher eingeschriebenen wird bei jedem Aufruf neu errechnet in dem die bisher eingeschriebenen gezählt werden.
In meinem Skript seh ich ja bereits wie viele Plätze noch verfügbar sind, ich muss sie nicht nochmal berechnen. Von daher wäre eine einfache DB-Abfrage das logischste, oder überseh ich da Schwierigkeiten ?
$node->signup_total
am 24.02.2009 - 16:33 Uhr
Der gezählte Wert der bisher angemeldeten Nutzer steht in
$node->signup_total
(da wird er jedenfalls beim Laden der node reingeschrieben).$node->signup_close_signup_limit
enthält dann das Limit, so dass Du mit<?php
$available = $node->signup_close_signup_limit - $node->signup_total;
?>
die Anzahl der noch verfügbaren "Plätze" ermitteln kannst. Falls das Node-Objekt da nicht verfügbar sein sollte (müsste es aber über den View), kannst Du es ja noch über die Id nachladen:
<?php
$node = node_load(array('nid' => $nid));
?>
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Danke für den Tip ! Ich
am 25.02.2009 - 16:08 Uhr
Danke für den Tip !
Ich habe allerdings ein Problem: mein Feld bleibt leer egal was ich mache. Ich habe folgenden Code in views/modules/views_node.inc eingefügt:
'belegung' => array(
'name' => t('Anzahl der freien Plaetze'),
'sortable' => false,
'notafield' => true,
'value' = '20',
'help' => t('Zeigt die noch verfuegbaren Plaetze an'),
),
Wenn ich "notafield => false" setze kommt eine Fehlermeldung das "belegung" nicht deklariert ist. (Falls die Info von Bedeutung ist ;)).
Wo liegt mein Denkfehler ?
Lösung
am 26.02.2009 - 12:18 Uhr
Ich habe eine Lösung gefunden: und zwar mithilfe des "Views Custom Field" Modules ( http://drupal.org/project/views_customfield ).
Ich habe ein eigenes Feld mit folgendem phpcode eingefügt:
$available = mysql_query("SELECT anzahl FROM belegung WHERE nid = $data->nid");
while ($row = mysql_fetch_object($available))
echo $row->anzahl;
Eine Frage habe ich dennoch: Wenn ich keine Belegung festgelegt habe (bspw. weil es kein Limit für Anmeldungen gibt) wird meine Zelle an entsprechender Stelle leer ausgegeben. Es wäre natürlich schöner wenn ich eine Nachricht bekommen würde das keine Teilnehmerbegrenzung existiert. Von daher habe ich folgenden Code ausprobiert:
$available = mysql_query("SELECT anzahl FROM belegung WHERE nid = $data->nid");
while ($row = mysql_fetch_object($available))
if ( is_null ($row))
{
echo "keine Teilnehmerbegrenzung";
}
else
{
echo $row->anzahl;
};
Jedoch verschwindet der Code nach dem Abspeichern. Habe ich einen Fehler in meiner Syntax oder ist das ein Bug im Modul?