it-swarm-eu.dev

(Un-) formátování každého prvku formuláře

Když něco prohlásíme

$form['textfield'] = array(
  '#type' => 'textfield',
  '#title' => 'textfield title',
  '#maxlength' => 8,
  '#required' => true,
);

Výstupem bude něco jako:

<div id="edit-textfield-wrapper" class="form-item">
  <label for="edit-textfield">textfield title: <span title="This field is required." class="form-required">*</span></label>
  <input type="text" class="form-text required" value="" size="60" id="edit-textfield" name="textfield" maxlength="8">
</div>

Jsem však ochoten odebrat kontejner div a label z některých mých polí, například takto:

<input type="text" class="form-text required" value="" size="60" id="edit-textfield" name="textfield" maxlength="8">

Je to možné? Existují nějaké příklady někde?

7
acm

Stačí implementovat hook_theme_registry_alter () , aby se změnila funkce motivu, která se vyvolá při vyvolání theme('form_element'); normálně je vyvolána funkce motivu theme_form_element () .

function theme_form_element($element, $value) {
  // This is also used in the installer, pre-database setup.
  $t = get_t();

  $output = '<div class="form-item"';
  if (!empty($element['#id'])) {
    $output .= ' id="' . $element['#id'] . '-wrapper"';
  }
  $output .= ">\n";
  $required = !empty($element['#required']) ? '<span class="form-required" title="' . $t('This field is required.') . '">*</span>' : '';

  if (!empty($element['#title'])) {
    $title = $element['#title'];
    if (!empty($element['#id'])) {
      $output .= ' <label for="' . $element['#id'] . '">' . $t('!title: !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n";
    }
    else {
      $output .= ' <label>' . $t('!title: !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n";
    }
  }

  $output .= " $value\n";

  if (!empty($element['#description'])) {
    $output .= ' <div class="description">' . $element['#description'] . "</div>\n";
  }

  $output .= "</div>\n";

  return $output;
}
function mymodule_theme_registry_alter(&$theme_registry) {
  if (isset($theme_registry['form_element']) {
    $theme_registry['form_element']['function'] = "theme_mymodule_form_element";
  }
}

Pomocí kódu theme_form_element() můžete napsat vlastní motivovou funkci a odstranit HTML značky, které nechcete. Nezapomeňte, že theme('form_element') je vyvolán pro každý výstup elementu formuláře pomocí API API; Pokud chcete změnit výstup HTML pouze elementu formuláře, musíte zkontrolovat hodnotu #type.
theme_textfield () je funkce motivu, která motivuje textové pole, ale nevytváří popisek, ani obtékání <div>, které je již na výstupu theme_form_element().

Alternativně to lze provést v tématu, které přepíše theme_form_element().
Který přístup byste měli použít, záleží na tom, zda potřebujete změnit výstup v určitém tématu, nebo u všech motivů povolených na vašem webu Drupal; v druhém případě vy potřeba implementovat háčky, které jsem nahlásil v modulu.

4
kiamlaluno

Pokud vím, není možné odstranit <div> wrapper, pokud téma neupravujete.

0
Ek Kosmos