Доступ к предварительным переменным в пользовательском блоке

drupal.stackexchange https://drupal.stackexchange.com/questions/3086

  •  16-10-2019
  •  | 
  •  

Вопрос

Я создал пользовательский блок для отображения контактной информации.

У меня есть функция предварительной обработки, которая устанавливает переменную контакта, как SO:

function atstump_preprocess(&$vars, $hook) {
    $vars['contact'] = array(
        'name' => 'Doug Gillum',
        'business' => 'Portland Stump Grinding',
        /...
    );
}

Я включил фильтр PHP и установил это в качестве текста:

<ul>
  <li><?php print $contact['name']; ?></li>
  <li><?php print $contact['phone']; ?></li>
  <li><?php print $contact['email']; ?></li>
</ul>

Однако он не распознает контакт $ в качестве правильной переменной и генерирует ошибку PHP e_notice:

Notice: Undefined variable: contact in eval() (line 2 of C:\xampp\htdocs\stumpgrinding\modules\php\php.module(75) : eval()'d code).
Notice: Undefined variable: contact in eval() (line 3 of C:\xampp\htdocs\stumpgrinding\modules\php\php.module(75) : eval()'d code).
Notice: Undefined variable: contact in eval() (line 4 of C:\xampp\htdocs\stumpgrinding\modules\php\php.module(75) : eval()'d code).

Можно ли даже получить доступ к переменным предварительной обработке в фильтре PHP? Если нет, то есть ли лучше, чем жесткий кодирование? может быть variable_set а также variable_get И как бы я настроил это через тему, я бы предпочел не делать для этого модуль.

Это было полезно?

Решение

Это не сработает.
Если вы используете функцию предварительной обработки, переменные будут доступны в шаблоне блока.

Я думаю, что в вашем случае вы должны отредактировать файл stens.php и добавить следующую строку:

$GLOBALS['email1'] = 'example@email.com';

Вы сможете использовать переменную $email1 через весь сайт.

Имейте в виду, что это не хорошая практика Drupal.

Другие советы

Еще одна альтернатива - Добавьте переменные в Информация о сайте Таблица переменных с использованием Hook Hook_form_form_id_alter следующим образом:

function mymodule_form_system_site_information_settings_alter ( &$form, &$form_state ) {
    $form['contact'] = array(
        '#type' => 'fieldset',
        '#title' => t('Contact'),
    );
    $form['contact']['contact_name'] = array(
        '#type' => 'textfield',
        '#title' => t('Contact name'),
        '#default_value' => variable_get('contact_name', ''),
        '#size' => 40,
    );
}

Затем в PHP фильтр Ввод вы можете получить эти переменные, используя:

<?php echo variable_get('contact_name', '');?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top