PHP Befehl Ergänzung um mehrere Inhaltstypen zu integrieren
am 17.04.2009 - 07:45 Uhr in
Hallo,
um ausschließlich neben dem Inhaltstyp gruppenbeitrag einen Block zu zeigen, fand ich diesen PHP Code. Klasse! :-)
<?php
$match = FALSE;
$types = array('gruppenbeitrag' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
return $match;
?>Nun habe ich ohne PHP Wissen rumexperimentiert, wie dieser Block nicht nur beim Inhaltstyp gruppenbeitrag sondern auch noch z.b. bei organicgroupund gruppendokument angezeigt werden könnte.
vermutlich irgendwie diese Zeile erweitern, nur wie?
##
$types = array('gruppenbeitrag' => 1);
##Besten Dank
Axel
- Anmelden oder Registrieren um Kommentare zu schreiben

PHP
am 17.04.2009 - 08:52 Uhr
Moin!
Mal vor der Lösung noch etwas Grundsätzliches: Grundlagen von PHP sollten bei der Arbeit mit Drupal in Muss sein (speziell, wenn man etwas tiefer in die Materie einsteigen will). Es bringt überhaupt nichts, wenn man ständig Code "vor die Nase gesetzt bekommt" und nicht versteht, was da überhaupt passiert.
Und Ausreden wie beispielsweise "ich hab einfach keine Zeit, mich damit zu beschäftigen" zählen nicht. Das klingt für mich eher nach "ich hab keine Lust dazu und hier bekommt man doch auch so die Antwort".
Nun zur Lösung.
Der obige Code ist etwas umständlich geschrieben.
<?phpfunction block_visible() {
$types = array('gruppenbeitrag', 'gruppendokument', 'organicgroup');
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (in_array($type, $types)) {
return TRUE;
}
}
return FALSE
}
?>
hth,
Stefan
[gelöst] PHP Code & PHP lernen
am 17.04.2009 - 09:46 Uhr
Hallo Stefan,
herzlichen Dank für Deine Antwort sowie für den Code, der perfekt funktioniert.
Zum Thema
Grundsätzliches: Grundlagen von PHP sollten bei der Arbeit mit Drupal ein Muss seinIch kann sehr gut verstehen, dass PHP-Könner/ Profis (ich weiß nicht wie ich es nennen soll, aber es ist sicher klar) genervt sind, wenn sie ständig das gleiche gefragt werden. Ich bewundere die Geduld, mit der hier im Forum geantwortet wird, einfach klasse und immer wieder vielen Dank!!!
Gleichzeitig habe ich aus dem Grund mit Drupal zu tun, weil es eben für Nicht-Coder machbar ist. Auf einem Seminar bei Hagen Graf (ja, ich habe live einen Drupalkurs bei ihm besucht) war auch Tenor, Drupal eröffnet Möglichkeiten, die ansonsten nur für Profis .... etc. So kam ich zu Drupal, ansonsten hätte ich komplett meine Finger von einem CMS gelassen.
Ich habe vor einiger Zeit nicht nur PHP Bücher gekauft sondern auch damit gekämpft (bzw. dann mehr mit den Online-Angeboten) und ... ja, extrem erfolglos.
{HTML: begriffen, ok, kleine PHP Lösungen teilweise nutzen (von 10 Scripten, die ich teste bzw. mich Stunden damit beschäftigte, schaffe ich immer vielleicht gerade 2 auch zum laufen zu kriegen). CSS: naja ... rudimentär, schnell entflieht mir die Logik, warum etwas wie oder mal wieder nicht funktioniert.}
Fazit:
Letztendlich weiß ich es nicht.
Was ich aber sicher weiß, dass ich nicht vor habe hier Wissen, Geduld und Hilfsbereitschaft auszunutzen, sondern mir eher überlege "Kannst du jetzt wieder etwas hier fragen?" "Schaffst Du es aktuell wirklich nicht selbst?" "Hast Du das Drupalforum auch wirklich durchsucht?"
Kurzum:
ich danke Dir für den kritischen Einwurf; ich befürchtete sowieso, dass so etwas irgendwann kommt. Eine befriedigende Antwort habe ich leider nicht, sondern nur meine Dankbarkeit für dies, dass hier im Drupalcenter gegenseitig so viel geholfen wird.
vielen Dank
Axel
www.globale-welt.de ( <---- vielleicht mein Beitrag, an andere Stelle etwas zu geben [Plattform, damit Menschen "Neues" entsprechend eigener Wünsche erschaffen können]... , ... vielleicht)
axelschulz@drupal.org
am 17.04.2009 - 09:54 Uhr
Auf einem Seminar bei Hagen Graf (ja, ich habe live einen Drupalkurs bei ihm besucht) war auch Tenor, Drupal eröffnet Möglichkeiten, die ansonsten nur für Profis .... etc.
Das sitmmt so ja auch, schließt aber nicht aus, dass es eben doch Punkte gibt (und zwar reichlich), wo es ohne PHP nicht geht und dafür hast du eingangs ja auch selbst den Beleg geliefert. Etwas blind zu kopieren / nachzuahmen, ohne die genaue Funktions-/Wirkungsweise zu verstehen ist immer schwer unglücklich. Das gilt für die Programmierung in besonderem Maße, aber eben auch für alles andere, z.B. fürs Kochen.
Mit weniger PHP-Know-How kommst du vermutlich nur bei Joomla aus. Ich bin sicher auch dafür hat Hagen das passende Seminar im Angebot...
--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!
webseiter.de
OT
am 17.04.2009 - 10:05 Uhr
herzlichen Dank für Deine Antwort sowie für den Code, der perfekt funktioniert.
Bitte. Jederzeit wieder (das meine ich jetzt wirklich so).
Ich kann sehr gut verstehen, dass PHP-Könner/ Profis (ich weiß nicht wie ich es nennen soll, aber es ist sicher klar) genervt sind, wenn sie ständig das gleiche gefragt werden. Ich bewundere die Geduld, mit der hier im Forum geantwortet wird, einfach klasse und immer wieder vielen Dank!!!
Ich bin mir natürlich darüber im Klaren, dass nicht Jeder bereits mehrere Jahre mit PHP gearbeitet haben kann. Und ich finde es auch immer wieder erstaunlich, wie geduldig ich doch bin :D .
Gleichzeitig habe ich aus dem Grund mit Drupal zu tun, weil es eben für Nicht-Coder machbar ist...
Allerdings ist es durchaus notwendig, ein wenig (ein klitzekleines Bisschen) PHP zu verstehen, wenn man mehr aus Drupal herausholen möchte.
Fazit: ...
Hm, wenn Du schon den Antrieb hast, selbstständig zu Lösungen zu kommen, dann schnapp Dir doch einfach mal ein paar kleine Tutorials und spiel einfach herum. Mal ganz abseits von Drupal, einfach nur Plain-PHP. Stell Dir selbst kleine Aufgaben, an denen Du dann herumprobierst.
Zum Beispiel:
"Wie frage ich ab, ob ein Wert in einer Liste enthalten ist?"
"Wie suche ich effektiv in einem Text?"
usw...
Was ich aber sicher weiß, dass ich nicht vor habe hier Wissen, Geduld und Hilfsbereitschaft auszunutzen, sondern mir eher überlege "Kannst du jetzt wieder etwas hier fragen?" "Schaffst Du es aktuell wirklich nicht selbst?" "Hast Du das Drupalforum auch wirklich durchsucht?"
Hach, wenn nur Alle so denken würden...
Wie gesagt, einfach mal mit PHP herumspielen, vielleicht auch mal einfach php.net die Funktionsliste durchwühlen. Da findet man Funktionen, die man immer schon mal verwenden wollte :-)
Stefan
php
am 17.04.2009 - 12:19 Uhr
Hallo,
Beispiel meiner PHP-Bemühungen:
Leider muss ich sagen, dass der obige Code doch noch nicht ganz klappt, weil er (zumindest bei mir) den gewünschten Block überall zeigt. Ich habe vorhin nur die Seiten getestet wo er kommen soll, deswegen fiel es mir zuvor nicht auf, ... tja... soll vorkommen ;-)
UND ich habe selbstständig eine Lösung gefunden (soweit zu meinem Lernwillen und meinem Wunsch, fremde Nerven nicht zu sehr zu belasten ;-)
So funktioniert es:
<?php$match = FALSE;
$types = array('gruppenbeitrag' => 1, 'gruppendokument' => 1, 'gruppe' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
return $match;
?>
Warum Dein Code, Stefan, bei mir doch nicht geht d.h. auch auf der Profilübersicht und Startseite der Block gezeigt wird,... keine Ahnung.
Mein neuer Code geht nun und zeigt den Block nur auf Seiten mit dem Inhaltstyp: gruppenbeitrag, gruppe und gruppendokument.
Zugegeben, viel trial and error plus im Internet suchen wie bekloppt... aber mühsam ernährt sich der Drupalanfänger ;-)))
thanx
axel :-)
Block Sichtbarkeit
am 17.04.2009 - 15:24 Uhr
Warum Dein Code, Stefan, bei mir doch nicht geht d.h. auch auf der Profilübersicht und Startseite der Block gezeigt wird,... keine Ahnung.
Ich weiss es :-) .
Weil ich den Code in eine Funktion gepackt hatte, dies bei den Sichtbarkeitseinstellungen für Blöcke jedoch nicht nötig ist / nicht gemacht werden soll.
Ein einfaches
<?php print block_visible() ?>nach der Funktion und schon sollte es funktionieren. Oh, und natürlich noch ein;hinterreturn FALSE. Das hatte ich ganz übersehen... tsts.hth,
Stefan