Funktionen verbinden (PHP-Frage)
am 17.12.2009 - 10:46 Uhr in
Hallo zusammen,
ich schreibe dieses Thema extra in OffTopic da es eigentlich nicht hierher gehört, ich hoffe aber trotzdem das mir jemand helfen kann. Ich kenne mich mit PHP nur sehr rudimentär aus und stehe gerade vor einem wahrscheinlich ganz kleinem Problem für jemanden der sich auskennt.
Ich will einer (custom) Node in Drupal eine Region zuweisen. Das funktioniert auch Problemlos, allerdings gibt es schon eine Funktion dieser Art und die beiden kommen sich ins Gehege. Ich müsste die beiden lediglich verbinden. Eventuell kann mir da ja jemand helfen, denn für sich genommen funktionieren die beiden Problemlos.
Erstere ist:
<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
if ($secondary = menu_secondary_local_tasks()) {
$output = '<span class="clear"></span>';
$output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
$vars['tabs2'] = $output;
}
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
if (
arg(0) == 'user' && is_numeric(arg(1)) && arg(2) == 'bio') {
$vars['template_files'][] = 'page-bio-edit';
}
return $vars;
}
return array();
}
?>
Die welche da mit eingearbeitet werden muss ist jene:
<?php
function _phptemplate_variables($hook, $variables) {
// Load the node region only if we're not in a teaser view.
if ($hook == 'node' && !$vars['teaser']) {
// Load region content assigned via blocks.
foreach (array('galerie1') as $region) {
$variables[$region] = theme('blocks', $region);
}
}
return $variables;
}
?>
Ich bedanke mich vielmals im Voraus und danke für die Mühen.
Beste Grüße vom,
Genesis
- Anmelden oder Registrieren um Kommentare zu schreiben
Ganz einfach: <?php /***
am 17.12.2009 - 11:15 Uhr
Ganz einfach:
<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
if (
$secondary = menu_secondary_local_tasks()) {
$output = '<span class="clear"></span>';
$output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
$vars['tabs2'] = $output;
}
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
if (arg(0) == 'user' && is_numeric(arg(1)) && arg(2) == 'bio') {
$vars['template_files'][] = 'page-bio-edit';
}
return $vars;
}
// Load the node region only if we're not in a teaser view.
if ($hook == 'node' && !$vars['teaser']) {
// Load region content assigned via blocks.
foreach (array('galerie1') as $region) {
$variables[$region] = theme('blocks', $region);
}
return $variables;
}
return array();
}
?>
Den Code in die bestehende Routine einfügen, aber der Ausdruck "return $variables;" muß mit in die IF-Abfrage, da zum Schluß, wenn keine der IF-Bedingungen zieht, ein leeres Array zurückgegeben werden soll.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Ich bin dir recht herzlich
am 17.12.2009 - 11:33 Uhr
Ich bin dir recht herzlich dankbar Werner! Hat wunderbar funktioniert.
In Anbetracht das es bald soweit ist schon mal eine ruhige Zeit und ein paar schöne Tage!
Beste Grüße vom,
Lars
Es ist mir ja peinlich, aber
am 19.12.2009 - 13:32 Uhr
Es ist mir ja peinlich, aber ich bräuchte dann doch noch mal Hilfe. Ich habe es zwar selbst versucht, bekomme aber nur den White Screen of ultimate death and evil... Ich müsste in die obige Funktion noch eine weitere einbauen und verzweifle daran das richtig zu bewerkstelligen.
Das ist wie gehabt die Ausgangsfunktion:
<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
if (
$secondary = menu_secondary_local_tasks()) {
$output = '<span class="clear"></span>';
$output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
$vars['tabs2'] = $output;
}
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
if (arg(0) == 'user' && is_numeric(arg(1)) && arg(2) == 'bio') {
$vars['template_files'][] = 'page-bio-edit';
}
return $vars;
}
// Load the node region only if we're not in a teaser view.
if ($hook == 'node' && !$vars['teaser']) {
// Load region content assigned via blocks.
foreach (array('galerie1') as $region) {
$variables[$region] = theme('blocks', $region);
}
return $variables;
}
return array();
}
?>
Dort bräuchte ich nun wiederum diese Funktion eingebaut:
<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
// This first part was already in the PHPTemplate engine code and gives page.tpl.php variances based on the args.
$i = 0;
$suggestion = 'page';
$suggestions = array($suggestion);
while ($arg = arg($i++)) {
$suggestions[] = $suggestion . '-' . $arg;
if (!is_numeric($arg)) {
$suggestion .= '-' . $arg;
}
}
// This if block was added to give a page-node-node_type.tpl.php that has precedence over the args.
if (arg(0) == 'node' && is_numeric(arg(1)) && isset($vars['node'])) {
if (isset($vars['node']->type)) {
$suggestions[] = $suggestion . '-' . $vars['node']->type;
}
}
// This also from PHPTemplate to make sure the front page gets its own template.
if (drupal_is_front_page()) {
$suggestions[] = 'page-front';
}
$vars['template_files'] = $suggestions;
return $vars;
}
return array();
}
?>
Einzeln funktionieren beide problemlos, nur verbunden bekomme ich sie nicht.
Vielen Dank erneut an jeden der sich dafür die Zeit nimmt.
Beste Grüße vom,
Genesis
Ich habe ich mir das jetzt
am 19.12.2009 - 15:45 Uhr
Ich habe ich mir das jetzt mal in Ruhe angesehen, aber das gefällt mir micht. Die bisherigen Teile sind klar über IF-Bedingungen abgetrennt, aber die neuen Funktionsteile nicht. Der alte und der neue Teil passen ohne weitere Information nicht zusammen, tut mir leid.
Der Zusatz muß ja in den ersten Teil eingebaut werden "if (hook == page) {" und wenn man das einfach so reinklebt, wird der Code immer zusätzlich ausgeführt und vars erst danach zurückgegeben, aber immer vom neuen Teil modifiziert. Da weiß ich nicht, ob das so Sinn macht.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Ich stelle jetzt doch mal
am 19.12.2009 - 16:01 Uhr
Ich stelle jetzt doch mal meinen Versuch rein, aber ohne jede Garantie.
Beste Grüße
Werner
<?php
/**
* Override or insert PHPTemplate variables into the templates.
*/
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
if ($secondary = menu_secondary_local_tasks()) {
$output = '<span class="clear"></span>';
$output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
$vars['tabs2'] = $output;
}
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
if (arg(0) == 'user' && is_numeric(arg(1)) && arg(2) == 'bio') {
$vars['template_files'][] = 'page-bio-edit';
}
// This first part was already in the PHPTemplate engine code and gives page.tpl.php variances based on the args.
$i = 0;
$suggestion = 'page';
$suggestions = array($suggestion);
while ($arg = arg($i++)) {
$suggestions[] = $suggestion . '-' . $arg;
if (!is_numeric($arg)) {
$suggestion .= '-' . $arg;
}
}
// This if block was added to give a page-node-node_type.tpl.php that has precedence over the args.
if (arg(0) == 'node' && is_numeric(arg(1)) && isset($vars['node'])) {
if (isset($vars['node']->type)) {
$suggestions[] = $suggestion . '-' . $vars['node']->type;
}
}
// This also from PHPTemplate to make sure the front page gets its own template.
if (drupal_is_front_page()) {
$suggestions[] = 'page-front';
}
$vars['template_files'] = $suggestions;
return $vars;
}
// Load the node region only if we're not in a teaser view.
if ($hook == 'node' && !$vars['teaser']) {
// Load region content assigned via blocks.
foreach (array('galerie1') as $region) {
$variables[$region] = theme('blocks', $region);
}
return $variables;
}
return array();
}
?>
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Hallo Werner, so weit ich
am 19.12.2009 - 16:15 Uhr
Hallo Werner,
so weit ich das beurteilen kann hat das funktioniert. Sowohl die regionen in den Nodes werden angezeigt, als auch die Page-Templates nach Content Type.
Bin dir wirklich mehr als dankbar für deine Mühen. War noch eine ganz große Hürde beim derzeitigen Projekt.
Vielen lieben Dank und eine schönes Wochenende noch,
Lars