2013-10-08 4 views
0

모듈을 Drupal 6에서 Drupal 7로 이식하고 사용자 정의 모듈의 변수를 템플릿에 전달하려고합니다. 나는 이런 일이 :Drupal 7 - 사용자 정의 모듈에서 템플릿으로 변수를 전달하는 중 오류가 발생했습니다.

function my_callback_function(){ 

    ... //some unrelated code 

    $page_params = array(); 
    $page_params['items_per_page'] = 25; 
    $page_params['page'] = $_GET['page'] ? $_GET['page'] : 0; 
    $page_params['total_items'] = $data_provider->getNumItems(); 
    $page_params['total_pages'] = $data_provider->getNumPages($page_params['items_per_page']); 

    return theme('my_theme', $page_params); 
} 


function my_module_theme($existing, $type, $theme, $path) { 
    return array(
    'my_theme' => array(
     'variables' => array('page_params' => NULL), 
     'template' => 'theme/my_template_file', 
    ), 
); 
} 

을 그리고 * my_template_file.tpl.php 내부 * 나는 $ page_params를 사용하려고 :

<?php print $page_params['total_items']; ?> 

다음과 같은 오류 던져 내 사이트 수 있도록 그 모든 :

,536 : 의 코드 줄 theme.inc에 해당

Fatal error: Unsupported operand types in C:...\includes\theme.inc on line 1075

// Merge in argument defaults. 
    if (!empty($info['variables'])) { 
    $variables += $info['variables']; // THIS IS THE VERY EXACT LINE 
    } 
    elseif (!empty($info['render element'])) { 
    $variables += array($info['render element'] => array()); 
    } 

은 드루팔 6 있다는 내가) ( 호출을 테마를 떠날 경우, 오류가 표시되지 않습니다하지만 내 템플릿 내 $의 page_params 변수를 인식하지 못하는 내가 가진

return theme('my_theme', array('page_params' => $page_params)); 

을 내가 뭘 잘못하고 있는지 알아 내려고 API의 절반을 읽었지 만 지금까지 읽은 것처럼 이것이 맞춤 모듈의 변수를 템플릿에 전달하는 적절한 방법 인 것 같습니다. 따라서 모든 종류의 도움이 환영받을 것입니다.

미리 감사드립니다.

답변

1

마지막으로, 내가 잘못하고있는 것을 알았습니다.

내 테마() 호출을 확인했다 : 사실, 그들은 몇 가지 있었다

return theme('my_theme', $page_params); 

을하지만 내 hook_theme 구현은 아니었다. $ page_params가 변수 배열 인 경우 전체 배열을 변수로 사용할 수 없으며 배열 내부에 내 변수가 명시 적으로 지정되어야합니다.

<?php print $total_items; ?> 

그것은 보일 수 : 이런 식으로 뭔가 : 마지막으로

function my_module_theme($existing, $type, $theme, $path) { 
    return array(
    'my_theme' => array(
      'variables' => array(
      'items_per_page' => NULL, 
      'page' => NULL, 
      'total_items' => NULL, 
      'total_pages' => NULL, 
     ), 
    'template' => 'theme/my_template_file', 
); 
} 

그리고는, 내부 my_template_file.tpl.php 나는 $ page_params의 구성 요소로를 사용하는 대신 직접 변수 이름을 사용해야합니다 경험 많은 사용자에게는 분명하지만이 사실을 깨닫기까지는 다소 시간이 걸립니다. 나 같은 다른 초보자에게 유용 할 수 있기를 바랍니다.

0

drupal variable_set() 및 variable_get()을 사용하여 drupal 세션에 데이터를 저장하고 세션에서 데이터를 가져올 수 있습니다.

감사합니다.

+0

답변을 주셔서 감사합니다. 슬프게도 결국 코드를 ​​작업했기 때문에 슬프게도이 코드를 시도하지 않았습니다. 그러나 어쨌든, 나는 편도가 다른 편보다 낫다는 것을 알고 싶습니다. 또는 어떤 길을 선택하든 상관 없습니다. – Clickhere

+2

이 방법은 권장되지 않습니다. 임시 값이나 세션 값에 variable_set을 사용하지 마십시오. – anoopjohn