[gelöst] Block-Anzeige per PHP steuern
am 24.08.2010 - 13:50 Uhr in
Hallo,
ich will die Anzeige der Blöcke per PHP steuern, weil ich diese abhängig von Taxonomy und Pfad steuern möchte. Zudem könnte ich mir später vorstellen, einen Block per NodeField oder Keyword anzusteuern.
Mein bisheriger Quellcode sieht wie folgt aus (die vielen echo sind derzeit nur zu Fehlerfindung):
<?php
$return = FALSE; // Ausgehend davon, dass der Block NICHT angezeigt wird, setze ich den Wert auf FALSE
echo "Ergebnis: ".$return."<br />";
// Komma getrennte Liste mit TID´s
$desired_terms = array(1, 2, 3);
// Pfade, die durch Komme getrennt sind und als Wildcard fungiert der Stern (nur am Ende eines Pfades)
$desired_paths = array('startseite', 'portfolio/uebersicht', 'info/*');
// auf TID prüfen
if ( arg(0) == 'node' and is_numeric(arg(1)) )
{
// geprüft wird, ob es sich um einen NODE handelt
$node = node_load(arg(1));
foreach ($node->taxonomy as $term)
{
if (in_array($term->tid, $desired_terms))
{
$return = TRUE; // Der Wert wird auf TRUE gesetzt, wenn etwas gefunden wurde
echo "per TID: ".$term->tid."<br />";
}
}
}
// auf PFAD prüfen
// Ermitteln des aktuellen Pfads
if ($_GET['q'])
{
$my_drupal_path = $_GET['q'];
}
else
{
$my_drupal_path = substr($_SERVER['REQUEST_URI'], 1);
}
// Hier wird der Pfad in ein clean-Pfad umgewandelt, wenn es einen gibt (37-->start)
$my_path_alias = drupal_get_path_alias($my_drupal_path);
echo $my_path_alias."<br />";
Wenn der Pfad mit einem Element im Array übereinstimmt, dass wird TRUE ausgegeben
if (in_array($my_path_alias, $desired_paths))
{
$return = TRUE;
echo "per Pfad: ".$desired_paths."<br />";
}
// auf PFAD mit Wildcard prüfen
foreach($desired_paths as $path)
{
// prüfen, ob es ein Pfad mit Wildcard ist
if(stristr(substr($path, strlen($path)-1 , strlen($path)),"*"))
{
echo "Pfad mit Wildcard <br />";
echo "Pfad mit Wildcard: ".$path."<br />";
$path = substr($path, 0, strlen($path)-1); // Die Wildcard wird abgeschnitten
echo "Pfad ohne Wildcard: ".$path."<br />";
$my_path = substr($my_path_alias, 0 , strlen($path) );
echo "MyPfad ohne Rest: ".$my_path."<br />";
if(stristr($my_path,$path))
{
$return = TRUE;
echo "per Pfad (Wildcard): ".$desired_paths."<br />";
}
}
}
echo "Ergebnis: ".$return."<br />";
// Ergebnis wird ausgegeben
return $return;
?>DAS PROBLEM: Wenn ich den Code in eine Node eingebe, dann funktioniert er und gibt auch das korrekte Ergebnis aus. Nicht so, wenn ich den Code als Filter für einen Block angebe (ja ich habe PHP als Format gewählt). Dann wird er komischer Weise auch als TRUE aufgefasst (Block wird angezeigt), wenn er nicht TRUE ausgibt. Ist der Code falsch oder habe ich was übersehen?
- Anmelden oder Registrieren um Kommentare zu schreiben

Ich würde das Ganze mit dem
am 24.08.2010 - 14:09 Uhr
Ich würde das Ganze mit dem Devel Modul debuggen und nicht die ganzen Echos verwenden, dazu kannst Du die Funktion dpm($variable) aus dem Devel Modul besser benutzen.
Vielleicht löst sich hiermit der Fehler schon schneller auf.
Die Lösung
am 25.08.2010 - 13:01 Uhr
Die Lösung für das Problem ist so einfach wie ärgerlich:
Also der Skript arbeitet fehlerfrei und kann fast bedenkenlos genutzt werden...ABER
Der Skript wartet nicht auf ein Rückgabewert TRUE, sondern auf irgend etwas.
statt
return TRUE;kann auch
echo "X";oder was auch immer stehen
Wenn man also alle Ausgaben raus nimmt, dann funktioniert der Skript. So wie er da oben steht, erzeugt er einen Fehler.
Viel Erfolg beim Verwenden des Skripts (ohne echo).