2016-11-17 2 views
0

Отказ от ответственности: Я унаследовал сайт Drupal 7.44, не имеющий опыта работы с Drupal.Как связать шаблон Drupal с веб-формой с несколькими средами?

Бизнес пытается создать новую веб-форму, и они хотят, чтобы она выглядела точно так же, как и существующая. Осмотревшись, я обнаружил, что веб-форма имеет привязанный к нему шаблон. Из документов мне кажется, что я должен создать больше файлов шаблонов в формате webform-form-[nid].tpl.php, где [nid] - это идентификатор узла веб-формы.

У нас есть несколько условий, в которых все изменения должны пройти - dev, test и, наконец, prod. Разве идентификатор узла не будет отличаться в каждой среде для вновь созданных веб-форм? Кроме того, если я хочу применить один и тот же шаблон к нескольким веб-формам, действительно ли мне нужно создать несколько одинаковых файлов шаблонов?

Я также нашел стилизацию CSS для существующей веб-формы, и она выглядит как .webform-client-form-25 button.webform-submit и т. Д. Это 25 является идентификатором узла. У меня мало опыта работы с CSS, но это очень плохо. Я не хочу копировать блоки CSS, изменяя идентификаторы узлов снова и снова. Каким образом можно назначить общие, многоразовые классы CSS для веб-форм? Я видел «Пользовательские классы» в разделе «Управление отображением» при редактировании формы, но, похоже, не изменил фактический HTML-код формы. Был ли я на правильном пути, должен ли я просто прочитать некоторые документы об этом?

ответ

1

Вы абсолютно правы, эти подробные селекторы не имеют смысла для многоразовых макетов.

Каждая форма HTML в формате webform получает класс по умолчанию .webform-client-form (что является общим) и идентификатор, содержащий nid .

Итак, вы можете изменить #webform-client-form-25 классу, упомянутому выше. Имейте в виду, что это повлияет на все webforms.

Чтобы установить настройки макета на несколько, но не все веб-формы, вам нужно предоставить этим веб-формам некоторый класс, чтобы отличить их от остальных. К сожалению, модуль Webform сам по себе не дает возможность сделать это, но вы можете добавить форму изменить крюк в template.php вашей темы:

function mytheme_form_alter(&$form, &$form_state, $form_id) { 
    $affected_forms = array('webform_client_form_25', 'webform_client_form_37', [...]); 
    if (in_array($form_id, $affected_forms)) { 
    $form['#attributes']['class'][] = 'my-custom-class'; 
    } 
} 

С .my-custom-class вы можете определить CSS только для группы формы веб-форм, перечисленные в $affected_forms.

Что касается файлов шаблонов, сам Webform заявляет:

Этот файл может быть переименован в "WebForm-form- [нидь] .tpl.php" нацелить на определенный веб-форму на сайте. Или вы можете оставить его «webform-form.tpl.php», чтобы повлиять на все веб-формы на вашем сайте.

Итак, опять же, это не дает возможность вне коробки, но вы можете создать тему предложения в вашем template.php путем расширения $vars['theme_hook_suggestions'] в функции страницы Preprocess.

+0

Спасибо, это помогает! Похоже, мне все-таки нужно знать, что форма формы раньше времени. Это верно? Таким образом, нет способа предоставить шаблон, который может быть повторно использован бизнес-пользователями для будущих веб-форм. Кажется, что это немного контр-интуитивно понятно, обычно вы думаете о шаблоне как об общей вещи, на которой может основываться новый конкретный экземпляр. – Egor

+0

Извините, я думаю, что я имел в виду, что классы CSS не могут быть заранее заданы. Похоже, что шаблоны МОГУТ быть сделаны универсальными с помощью предложений по темам, если я игнорирую CSS или найду другой способ сделать это в стороне от формы alter hook. – Egor

+0

Ну, есть способы обойти необходимость знать заранее, но он не предоставляется самой Webform. Через пользовательский интерфейс Drupal вы можете добавить поле выбора к типу содержимого веб-формы, в котором вы выбираете «тип» веб-формы. Затем вы можете создать предложение темы, основанное на значении этого поля. Таким образом, вы можете создавать различные веб-формы, принадлежащие определенному типу, и с помощью предложения темы использовать шаблоны типа 'webform-form- [type] .tpl.php'. Поэтому вместо проверки идентификатора формы вы должны проверить поле типа веб-формы. – Paul

Смежные вопросы