block Sichtbarkeit abhängig von Wert eines fields in content-type
am 12.07.2016 - 09:24 Uhr in
Hallo zusammen,
ich stehe gerade vor einem Problem, für das ich keine Lösung finden kann. Dazu muss man sagen, dass dies meine erste Drupal-Page ist und ich nicht der PHP-Profi vor dem Herrn bin :-)
Ich habe ein webform-block erstellt, der auf ganz bestimmten Seitentypen angezeigt werden soll. Eigentlich kein Problem, aber die Schwierigkeit liegt darin, dass die Sichtbarkeit des blocks an einem field innerhalb des content-types abhängt.
Also: Es gibt einen block mit einem webform. Dann gibt es einen content-type "contenttype". In diesem gibt es ein spezifisches Feld "status" mit den möglichen Werten "active", "paused" oder "hidden". Den content-type mit dem jew. status lasse ich über views als Liste auf einer übersichtsseite ausgeben (für jeden status eine). Das Webform soll nun nur bei artikeln erscheinen, die den status "active" besitzen und bei "closed" und "hidden" nicht.
Ich habe es schon geschafft, dass das webform generell beim content-type "contenttype" angezeigt wird:
<?php
$nodeType = "contenttype";
// valid node id in view mode
if ( arg(0) == 'node' AND is_numeric(arg(1)) AND arg(2) == FALSE ) {
$node = node_load(arg(1)); // cached
if ($node->type == $nodeType) {
return true;
}
}
return FALSE;
?>
Wie kann ich diesen Code erweitern, so dass er in diesem content-type zusätzlich noch den status des fields "status" abfragt und nur true zurückgibt, wenn "status" auf "active" steht?
Vielen Dank schonmal vorab für eure Hilfe.
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo,ich würde in der
am 12.07.2016 - 10:28 Uhr
Hallo,
ich würde in der unteren if Abfrage folgendes hinzufügen:
if ($node->type == $nodeType && $node->status == 1) {
return true;
}
MfG
Robert
PS: Der node status sollte nach Deinem node_load als Integer Variable in $node vorhanden sein.
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hi Robert, vielen Dank für
am 12.07.2016 - 11:44 Uhr
Hi Robert,
vielen Dank für deine schnelle Rückmeldung. Habs eben ausprobiert - so hat es leider noch nicht funktioniert. Der webform block wird trotzdem bei allen artikeln des content-types angezeigt und ignoriert weiter die variable "status"
<?php
$nodeType = "contenttype";
// valid node id in view mode
if ( arg(0) == 'node' AND is_numeric(arg(1)) AND arg(2) == FALSE ) {
$node = node_load(arg(1)); // cached
if ($node->type == $nodeType && $node->field_status == 1) {
return true;
}
}
return FALSE;
?>
Der Maschinenlesbare Name der content-type Variable ist "field_status" und der Wert "active" steht in der Auswahlliste als 1.
VG Thom
Hi Thom, sorry ich dachte Du
am 12.07.2016 - 12:16 Uhr
Hi Thom,
sorry ich dachte Du meinst den Orginalen Node Status, ob veröffentlicht oder nicht:
0: published
1: not published
und nicht ein Feld mit eigenen Werten.
Mach mal einen
var_dump($node->field_satus[LANGUAGE_NONE]);
die();
Um zu sehen wie Du an den Wert in field_status kommst.
Das kann ja auch sprachabhängig sein.
In dem Fall müsste der Code mit einem String Value verglichen werden:
if ($node->type == $nodeType && $node->field_status[LANGUAGE_NONE][0]['value'] == 'active')
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Genial
am 12.07.2016 - 16:52 Uhr
Hey Robert - Du bist genial! :-) Vielen Dank. Der Value war statt 'active' ein integer. Jetzt funktioniert es genau wie es soll. Vielen Dank!!!