Πως να εμφανίσετε ένα δυναμικό ή custom μενού σε ένα view

Έστω οτι θέλουμε να εμφανίσουμε ένα μενού σε ένα view του οποίου τα links εξαρτώνται απο την ύπαρξη ή μή nodes συγκεκριμένου τύπου.

Για παράδειγμα έστω οτι έχουμε άρθρα που θέλουμε να εμφανίζονται σε ένα view κατηγοριοποιημένα ανα έτος. Στο πάνω μέρος του view (header) θα μπορούσαμε να τοποθετήσουμε μενού που θα περιέχει links με τα έτη εκείνα για τα οποία υπάρχει τουλάχιστον ένα άρθρο.

Η διαδικασία περιλαμβάνει τοποθέτηση php κώδικα στο Header του view
Τα βήματα που πρέπει να ακολουθήσουμε είναι

α) εύρεση των άρθρων (ή οποιουδίποτε άλλου content type επιθυμούμε)
β) κατηγοριοποίηση ανα έτος (έστω οτι στο άρθρο υπάρχει field που περιγράφει την ημερομηνία του)
γ) δημιουργία links ανα έτος

Υλοποίηση

Υποθέτοντας ότι έχουμε δημιουργήσει ένα view για το οποίο έχουμε δώσει path το 'view-articles' και το έχουμε ρυρμίσει κατάλληλα για να εμφανίζει content type 'article'

στην κατηγορία Header κλικ στο add, έπειτα επιλογή Global: PHP και γράφουμε τον παρακάτω κώδικα (στο Output code)

//ευρεση όλων των άρθρων
$query = new EntityFieldQuery;
$result = $query->entityCondition('entity_type', 'node')->
entityCondition('bundle', 'article')->
propertyCondition('status', 1)->execute();

//φόρτωση όλων των άρθρων
$items_nids = array_keys($result['node']);
$the_items = entity_load('node', $items_nids);

//καταχώρηση όλων των ετων που υπάρχουν στο πεδίο field_date των άρθρων
$tDatsY = array();
foreach ($the_items as $theitem) {
$myear=strftime("%Y" , strtotime($theitem->field_date['und'][0]['value']) );
$tDatsY[$myear]=true;
}

//αυξουσα ταξινόμηση των ετων που βρέθηκαν
sort($tDatsY);

//για κάθε έτος που βρέθηκε δημιούργησε ενα link που θα δίχνει στο ίδιο view με //παράμετρο το έτος
$links = array();
foreach ($tDatsY as $myear) {
$myearName= t('year') . $myear;
$items[] = array( 'data' => l($myearName,'view-articles/'.$myear) );
}

//όπου 'view-articles' το path (url) του view μας

//εμφάνιση του μενου ul – li
print theme_item_list(
array(
'items' => $items,
'title'=>'',
'type' => 'ul',
'attributes' => array('class'=>'my-view-menu-class')
)
);
//όπου 'my-view-menu-class' η κλάση του μενού ώστε να διαχειριστούμε την εμφάνιση του απο κάποιο css
?>

Πλέον το δυναμικό μενου θα εμφανίζεται στο header του view μας (μην ξεχάσετε να αποθυκεύσετε πρώτα τις αλλαγές!)