Πριν λίγο καιρό για μια δουλεία στην Εντέλεια χρειάστηκε να μπορώ να έχω διαφορετικό theme με βάση σε τι node type βρισκόμαστε στο Drupal.
Έψαξα στο Documentantion του Drupal και μετά στο Google αλλά δεν βρήκα κάτι σχετικό.
Έτσι χρειάστηκε να το γράψω τον παρακάτω κώδικα που προσθέτοντάς στο template.php του θέματος που χρησιμοποιήσει μπορείς να έχεις διαφορετικό page.tpl.php για κάθε node type. Δηλαδή μπορώ να φτιάξω ένα page-nodetype-forum.tpl.php και όποτε το node που φορτώνω είναι τύπου forum να μου φορτώνει το page-nodetype-forum.tpl.php
<?php
function _phptemplate_variables($hook, $vars) {
switch ($hook) {
case 'page':
// Add page template suggestions based on node type.
// page-nodetype-news.tpl.php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$result = db_query('SELECT type FROM {node} WHERE nid = %d',arg(1));
$record = db_fetch_object($result);
$node_type = $record->type;
$suggestions[] = 'page-nodetype-'. $node_type;
$vars['template_files'] = $suggestions;
}
break;
}
return $vars;
}
?>
Αφού είδα ότι παίζει είπα να το γράψω και στο Documetation του Drupal αφού και εγώ εκεί πήγα πρώτα για να δω μήπως έχει γράψει κανένας τίποτε σχετικά.
Πρόσθεσα αρχικά αυτήν την book page στο Documentation του Drupal http://drupal.org/node/249726/revisions/286011/view με τον παραπάνω κώδικα.
Μετά από λίγες εβδομάδες αφήνουν ένα σχόλιο ότι δεν χρειάζεται να φορτώσουμε το Object του node καθώς στο template.tpl.php υφίσταται. Έτσι μου παραθέτει τον κώδικα όπου και κάνω update το Documetation http://drupal.org/node/249726/revisions/296736/view, και το αντίστοιχα στο site που έφτιαχνα.
Μετά από ακόμα μερικές εβδομάδες κάποιος άλλος προτείνει μια παραλλαγή του κώδικα για να κρατάει το tamplate page και όταν κάνεις edit το αντίστοιχο node type.
<?php
// theme overrides
function _phptemplate_variables($hook, $vars) {
switch ($hook) {
case 'page':
// Add page template suggestions based on node type.
if ($vars['node']) {
$suggestions[] = 'page-nodetype-'. $vars['node']->type;
// check to see if we're on the edit page
$path = explode('/', $_GET['q']);
if (!(arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'edit')) {
$vars['template_files'] = $suggestions;
}
}
break;
}
return $vars;
}
?>
Έτσι πάλι έκανα το κώδικα update τόσο στο Documetation http://drupal.org/node/249726 όσο και στο site που έφτιαχνα φυσικά.
Εκεί που θέλω να καταλήξω είναι ότι, ακόμα και με αυτό το χαζό hack, ενώ αρχικά φαίνεται ότι εσύ μοιράζοντας το προσφέρεις στην κοινότητα, τελικά παίρνεις πολλά περισσότερα από ότι είχες προσφέρει αρχικά.