2016-11-17 9 views
0

저는이 문제에 대해 두뇌를 쌓아 왔지만 가능한 한 최선의 방법으로 문제를 설명하려고 최선을 다할 것입니다. template.php 안에 여러 개의 조건문이있는 사용자 정의 함수가 있습니다. 조건이 참일 때 변수에 값을 할당하고 그 변수를 노드 사전 처리 함수에 전달하여 해당 변수를 노드 템플리트에 표시 할 수 있습니다.변수를 _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에는별로 좋지 않지만 변수 범위가 여기에서 문제가 될 수 있다는 것을 충분히 알고 있습니다. 이것을 구현하는 가장 좋은 방법은 무엇입니까? 모든 지침을 크게 주시면 감사하겠습니다.

감사합니다. 마크.

+0

$ GLOBALS 배열을 사용하여 http://php.net/manual/fr/reserved.variables.globals.php을 저장할 수 있습니다. – Fky

답변

0

호출되지 않으면 함수 _mytheme_date_repeat_string()이 실행되지 않습니다. 전처리 기능 (. mytheme_preprocess_을 시작하는 모든 기능은 드루팔의 테마 시스템에 의해 자동으로 호출된다 즉.

당신이 필요가있는 무엇 하나 mytheme_preprocess_node()_mytheme_date_repeat_string()의 코드를 이동하거나 리팩토링과를 호출합니다.

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

감사합니다 피에르. 이것은 물을 뿌린 버전입니다 내 코드가 불완전하다. 내 실제 코드에서 함수가 반환되고 실행 중입니다. 필자는 변수에 값을 저장하는 방법을 알고 싶었고, 그 함수를 사용하여 템플릿 사용을 위해 preprocess_node 함수의 다른 곳에서 그 값으로 변수를 호출했습니다. –

+0

실제 상황을 반영하는 코드로 질문을 업데이트하면 내 대답을 업데이트 할 수 있습니다. '$ vars'를 넘겨주고 모든 함수에서 참조 (즉,'& $ vars')를 받으면 큰 빈을 사용하여 데이터를 전달할 수 있습니다. 함수의 서명에서부터 소비하고 반환하는 것에 대해 알지 못하기 때문에 코드를 읽기가 어려워집니다. –