2016-11-17 6 views
0

Я уже ломаю себе голову над этим, но я сделаю все возможное, чтобы описать проблему как можно лучше. У меня есть пользовательская функция, написанная в template.php, с кучей условностей. Когда условие истинно, я хотел бы присвоить значение переменной, а затем передать эту переменную intro функцию препроцесса узла, которая позволяет визуализировать переменные в шаблоне узла.Передать переменную функции _preprocess_node для использования в шаблоне узла

Функция, содержащая условие:

function _mytheme_date_repeat_string($vars) { 

    $exdate_pos = strpos($rrule['WKST'], 'EXDATE:'); 
    if($exdate_pos > 0) { 

     $vars['testvar'] = 'abc123'; 
    } 
} 

Функция предобработки, что я хотел бы, чтобы сделать переменную в для использования шаблона узла:

function mytheme_preprocess_node(&$vars, $hook) { 

    $vars['new_variable'] = $testvar; 

} 

Использование по назначению в узле .tpl.php:

<?php print $new_variable; ?> 

Я не очень хорош с PHP, но я знаю достаточно о программировании, чтобы знать, что область переменных может быть проблемой здесь. Какой был бы лучший способ реализовать это? Любые рекомендации приветствуются.

Thanks, Mark.

+0

вы можете использовать $ GLOBALS массив, чтобы сохранить его http://php.net/manual/fr/reserved.variables.globals.php – Fky

ответ

0

Если он не вызывается, функция _mytheme_date_repeat_string() никогда не будет выполнена. функции Предварительная обработка (т.е.. любая функция запуска mytheme_preprocess_, вызываются автоматически по теме системы в Drupal.

Что вам нужно либо переместить код _mytheme_date_repeat_string() в mytheme_preprocess_node() или реорганизовать его и называют.

function _mytheme_date_repeat_string($rrule) { 
    $exdate_pos = strpos($rrule['WKST'], 'EXDATE:'); 
    if($exdate_pos > 0) { 
     return 'abc123'; 
    } 
    else { 
     return NULL; 
    } 
} 

/** 
* Prepares variables for node templates. 
*/ 
function mytheme_preprocess_node(&$variables, $hook) { 

    // Get $rrule from somewhere 
    $rrule = ... ; 

    $testvar = _mytheme_date_repeat_string($rrule); 
    if ($testvar) { 
    $variables['new_variable'] = $testvar; 
    } 
} 

Вы код не показывает, откуда исходит $rrule. Предположим, вы получите его для $variables['node'].

+0

Спасибо, Пьер. Это политая версия мой код является неполным. В моем действительном коде функция возвращается и выполняется. Я более или менее хотел знать, как я могу сохранить значение в переменной _within_ этой функции и вызывать эту переменную с этим значением в другом месте функции preprocess_node для использования шаблона. –

+0

Обновите свой вопрос кодом, который отражает то, что реально происходит, и я мог бы обновить свой ответ. Если вы передадите «$ vars» и получите его по ссылке (т.е. '& $ vars') во всех ваших функциях, вы можете использовать для этого большой бит для передачи данных. Имейте в виду, что это приводит к затруднению чтения кода, поскольку вы не знаете, от подписей функций, от того, что они потребляют и возвращают. –