Зависимости для пользовательских форм в Друпал 7

У меня есть несколько форм для одного типа контента в Drupal 7. Цель этого состоит в том, чтобы инициировать различные рабочие процессы, когда пользователь отправляет форму, в зависимости от типа включенной информации и определяемой /url для каждого. Эти формы находятся на разных страницах, и поля, показанные на каждой из них, определены в пользовательском модуле. Например:

... / form1 запускает рабочий процесс 1 и отображает поля a, b, e, f, g

... / form2 запускает рабочий процесс 2 и отображает поля a, b, c, e, h

... / form3 запускает рабочий процесс 3 и отображает поля a, b, f, x, y

В этом модуле это выглядит примерно так:

function my_custom_module_custom_form() {
// Build Form
  $form = getForm('content_type');

    switch (strtolower($form['#action'])):
      case('/form1'):  
        $form['field_some_field']['#access'] = FALSE;

    switch (strtolower($form['#action'])):
      case('/form2'):
        $form['field_other_field']['#access'] = FALSE;

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

Могу ли я создать шаблон страницы для каждой формы и связать кнопку отправки для запуска определенного действия в модуле?

Примечание: добавление зависимостей или использование отдельных типов контента не применимо к нашим вариантам использования. Если в приведенном выше коде есть ошибки, это только то, что я привел здесь краткий пример, сам модуль работает.

Спасибо за помощь!

1 ответ

Я создал предложения темы для конкретной формы узла:

Change the function name to THEMENAME_preprocess_node
Change initial value of template_filename to 'node'
Account for dashes in aliases by adding this line below the second if statement: $alias = str_replace('-', '_', $alias);

Итак, вот как это выглядит сейчас:

function THEMENAME_preprocess_node(&$variables, $hook) {
  // Node template suggestions based off URL alias
  if (module_exists('path')) {
    $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if ($alias != $_GET['q']) {
      $alias = str_replace('-', '_', $alias);
      $template_filename = 'node';
      foreach (explode('/', $alias) as $path_part) {
        $template_filename = $template_filename . '__' . $path_part;
        $variables['theme_hook_suggestions'][] = $template_filename;
      }
    }
  }
}

Пожалуйста, дайте мне знать, если вам нужно больше деталей.

Другие вопросы по тегам