Πώς να εμφανίσετε ένα block του Drupal σε συγκεκριμένες σελίδες

Έστω οτι θέλουμε να εμφανίσουμε ένα block μόνο σε συγκεκριμένα url aliases
Η λύση θα ήταν να ορίσουμε τα url aliases στην κατηγορία “Visibility settings” του επιθυμητού block
Επιλέγουμε λοιπόν το “Only the listed pages” και στο textarea πληκτρολογούμε τα urls που επιθυμούμε

παράδειγμα

mycontent
mycontent/*

Έτσι το συγκεκριμένο block θα εμφανίζεται:

στην αρχική μας σελίδα www.mydomain.gr
στο σχετικό url www.mydomain.gr/mycontent
σε όλα τα mycontent ακολουθούμενα απο κάποιο προσδιοριστικό


www.mydomain.gr/mycontent/1
www.mydomain.gr/mycontent/4
www.mydomain.gr/mycontent/25
και ούτω καθεξής

Τι γίνεται όμως σε περίπτωση που δεν υπάρχει το σχετικό url αλλά το content type είναι mycontent? (π.χ. Node/1234 – δεν υπάρχει url friendly)
Ή όταν υπάρχουν τόσα πολλά περιεχόμενα που δεν μπορούμε (χρονοβόρα διαδικασία) να ορίζουμε για το καθένα το κατάλληλο url ?

Μία λύση είναι η χρήση κατάλληλων modules όπως είναι το pathAuto όπου αναλαμβάνει αυτό τον ορισμό του url ανάλογα με το είδος του content type
Μια άλλη λύση θα ήταν η χρήση του taxonomy.

Και στις δύο όμως περιπτώσεις ή και σε οποιαδίποτε άλλη - με χρήση κάποιου module- περιορίζουμε και εξαναγκάζουμε το σύστημα μας να έχει συγκεκριμένες δομές και προσθέτουμε χαρακτηριστικά χωρίς απαραίτητα να είναι τα επιθυμητά

Μια καλή λύση στην περίπτωσή μας είναι η επιλογή με custom έλεγχο (χρήση php)

Επιλέγουμε
“Pages on which this PHP code returns TRUE (experts only)"
και πληκτρολογούμε στο textarea τον παρακάτω κώδικα

$match = FALSE;
$types = array('mycontent' => 1);

//έλεγχος αν είναι url www.mydomain.gr/node/xx

if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load($nid);
$type = $node->type;

//εμφάνιση μυνήματος (για debug)
//drupal_set_message($type);

//έλεγχος αν το content type είναι αυτό που θέλουμε
if (isset($types[$type])) {
$match = TRUE;
}
}

//έλεγχος αν το url είναι www.mydomain.gr/mycontents
//ή είναι η αρχική σελίδα

if (arg(0) == 'mycontents' || drupal_is_front_page()) $match = TRUE;
return $match;
?>

Έτσι το block θα εμφανιστεί στα ακόλουθα

στην αρχική σελίδα
σε views (ή οτιδήποτε άλλο) που θα έχει url friendly “mycontents”
σε node τύπου content type “mycontent”