Передача данных между обратным вызовом модуля Drupal, предварительным процессом и шаблоном - PullRequest
0 голосов
/ 03 февраля 2011

Я создал модуль с именем finder, в котором я хочу получить параметры из URL-адреса, обработать их, а затем отобразить результаты через файл tpl.вот соответствующие функции ...

function finder_menu()
{
    $items = array();   
    $items['finder'] = array(
        'page callback' => 'finder_view',
        'access callback' => TRUE,
    );
    return $items;
}

function finder_theme($existing, $type, $theme, $path)
{
    return array(
        'finder_view' => array(
            'variables' => array('providers' => null),
            'template' => 'results',
        ), 
    );
}

function finder_preprocess_finder_view(&$variables)
{
    // put my data into $variables
}

function finder_view($zipcode = null)
{
    // Get Providers from Zipcode 

    return theme('finder_view', $providers);
}

Теперь я знаю, что вызывается finder_view.Я также знаю, что вызывается finder_preprocess_finder_view.Наконец, я знаю, что result.tpl.php используется для вывода.Но я не могу обернуть голову, как сделать значимую работу в обратном вызове, каким-то образом сделать эти данные доступными в препроцессоре, чтобы добавить их к «переменным», чтобы я мог получить доступ в файле tpl.

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

Спасибо ...

ОБНОВЛЕНИЕ: Это была проблема именования параметров.Drupal 6 использует ключ «arguments» в hook_theme, а не «variable».После того как поменял все заработало как положено.Я удалил препроцессор также во время выполнения моей логики в обратном вызове.

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

Ваша логика всегда должна быть в перезвоне.Который может быть в отдельном файле, указав «file» в массиве меню.

В вашем примере, как только вы «получаете провайдеров» из почтового индекса, который выглядит довольно важным.:)

В вашей функции темы вы можете и должны конвертировать массив $ provider в нечто, более похожее на традиционный drupal $ vars arary, либо вы можете пропустить как препроцесс, так и шаблон и просто сделать всеВаша тема работает в функции темы.препроцесс и шаблоны являются удобными и не всегда требуются.

Я бы переименовал функцию темы во что-то другое или, если уж на то пошло, обратный вызов, который немного облегчил бы понимание.

Это помогает?Я не уверен на 100%, что вы действительно спрашиваете, но если вы хотите упростить свой код, сохраняя при этом хорошую структуру, надеюсь, это поможет.

0 голосов
/ 03 февраля 2011

Проблема существовала в hook_theme, где я использовал «переменные» вместо «аргументы».Должен ли я просто удалить этот вопрос?

...