Bagaimana cara tema tampilan terbuka?

12

Saya telah membuat tampilan dengan sejumlah filter terbuka, tetapi terlihat sangat jelek.

masukkan deskripsi gambar di sini

Saya ingin memperbaiki tema, termasuk membungkus semuanya dalam suatu fieldset serta mengelompokkan beberapa elemen lainnya (seperti memasangkan input yang diterbitkan dan diperbarui), tetapi tidak yakin bagaimana cara melakukannya.

Saya mencoba var_dump formulir, tetapi tampaknya berjalan selamanya dan browser saya terkunci, jadi saya tidak dapat dengan mudah mempelajari apa pun tentang formulir itu.

Saya juga mencoba meletakkan formulir sebagai anak fieldset di formulir lain, tetapi mendapatkan semua informasi ID formulir dan sebagainya terbukti bermasalah (walaupun, saya memang mendapatkan style fieldset).

Adakah yang punya petunjuk?

Memperbarui:

Saya menyalin template dari modul ke direktori tema situs saya, dan memulai.

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>

Saya tidak bisa menemukan cara memasangkan bidang tanggal - Saya perlu memodifikasi properti widget agar saya dapat membungkusnya dalam HTML (menggunakan hook_form_alter tidak berfungsi karena #prefix dan #suffix ditambahkan $widget->widgetsehingga mereka hentikan output)

HorusKol
sumber

Jawaban:

22

Bentuk terbuka Tampilan Mereka sulit karena tidak berperilaku seperti kebanyakan bentuk dan menggunakan mekanisme label sendiri. Jadi, Anda tidak bisa hanya menggunakan form_alterpengait untuk menambahkan #prefixdan #suffixke elemen. Tetapi menggunakan THEME_preprocess_views_exposed_form, Anda dapat membuat mekanisme akhiran / awalan Anda sendiri:

function THEME_preprocess_views_exposed_form(&$variables) {
  if ($variables['form']['#id'] == 'views-exposed-form-VIEWNAME-DISPLAYID') {
    foreach ($variables['widgets'] as $id => &$widget) {
      switch ($id) {
        case 'first_date_id':
          $widget->prefix = '<div class="date-widgets-wrapper">';
          break;
        case 'last_date_id':
          $widget->suffix = '</div>';
          break;
      }
    }
  }
}

dan di file template

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <?php if (!empty($widget->prefix)) print $widget->prefix; ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
                <?php if (!empty($widget->suffix)) print $widget->suffix; ?>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>
Pierre Buyle
sumber
7

Anda dapat menyalin views-exposed-form.tpl.php dari situs / semua / modul / tampilan / tema ke jalur tema Anda untuk mengganti template.

Adam S
sumber
Anda juga dapat mengesampingkan tampilan tertentu hanya dengan pola seperti views-exposed-form--view_id.tpl.phpatau views-exposed-form--view_id--display_id.tpl.php, info lebih lanjut
user56reinstatemonica8
3

Lihat juga modul Filter yang Lebih Baik Terkena . Anda akan memerlukan rilis -dev untuk mendapatkan opsi filter yang dapat dilipat, meskipun saya berharap untuk mendapatkan rilis 1.1 yang tepat segera ...

mikeker
sumber
3

Anda harus melihat apa yang ada dalam form['#theme']item tersebut. Cara yang lebih baik untuk melakukan ini (lebih baik daripada var_dump()) akan menggunakan dsm($form)atau bahkan kpr($form), fungsi-fungsi ini akan tersedia setelah Anda menginstal modul devel ( http://drupal.org/project/devel ). form['#theme']harus berupa larik sekitar 7 elemen. Elemen-elemen ini adalah nama-nama kait tema yang dipanggil saat formulir ini diberikan. Anda dapat menggunakannya untuk menerapkan cara Anda sendiri untuk menentukan tema suatu formulir.

Salah satu item akan dipanggil views_exposed_form__VIEW_NAME__DISPLAY_ID.

Dalam modul Anda (jika Anda memilikinya) harus ada implementasi hook_theme ()

function MYMODULE_theme($existing, $type, $theme, $path) {
  return array(
    'views_exposed_form__VIEW_NAME__DISPLAY_ID' => array(
      'function' => 'my_exposed_form_theme_function',
      'render element' => 'form',
    )
  );
}

// somwhere later in code

function my_exposed_form_theme_function($vaiables) {
  //$vaiables['form'] contains a form array
  //to display a form element call drupal_render($vaiables['form']['some element'])
  //don't forget to call drupal_render($form) 
  //after you are done with rendering individual elements
  //
  //you can use template_preprocess_views_exposed_form() from 
  // views/theme/theme.inc as an example

  return "concatenated results of multiple drupal_render() calls";
}
ihor marusyk
sumber
2

Dalam situasi sebelumnya saya telah menggunakan Hook_form_alter () untuk menambahkan awalan dan akhiran untuk membentuk elemen untuk membungkusnya dalam div yang kemudian dapat ditata. Namun tidak yakin tentang pembungkus di fieldsets.

misalnya.

$form['submitted']['full_name']['#prefix'] = '<div class="background">';        
$form['submitted']['message']['#suffix'] = '</div>';
Teegan
sumber
1

Gunakan hook_form_FORM_ID_alter Drupal untuk memodifikasi formulir. Inilah yang memecahkan masalah saya tentang awalan karakter £ ke bidang harga saya (taruh ini di modul khusus Anda):

function THEME_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
   // check this is the right form
   if ($form['#theme'][0] == 'REPLACE_THIS') {
      // add the prefix
      $form['price']['min']['#prefix'] = "£";
   }
}
jackocnr
sumber
0

di halaman edit tampilan kita dapat memeriksa informasi tema (sudut kanan bawah). Ini memberikan informasi mengenai file templat yang digunakan oleh Drupal untuk membuat bagian berbeda dari tampilan di layar. Secara default, file template yang disediakan oleh modul views (di dalam folder temanya) digunakan, tetapi jika kami ingin memodifikasi cara tampilan ditampilkan, kami dapat mengganti file template tersebut dengan file template kustom yang dapat kami tempatkan di dalam file kami. folder tema sendiri sendiri (atau tema yang akan digunakan untuk menampilkan tampilan ini)

Informasi tema ini menunjukkan kepada kita bagaimana memberi nama file sesuai dengan hierarki (atau cakupan efek file templat yang akan Anda timpa templat templat tampilan sendiri.)

Sekarang, informasi tema ini mungkin tidak memperlihatkan semua file templat yang digunakan tampilan untuk merender tampilan spesifik ini.

jadi, buka situs / semua / modul / tampilan / tema dan salin views-exposed-form.tpl.php (karena dalam hal ini kami ingin mengganti default untuk rendering filter!) dan menempelkannya di dalam folder tema Anda sendiri, sekarang Anda harus mengikuti metode yang sama untuk mengontrol efek dari file template utama ini yang telah Anda masukkan ke dalam folder tema Anda sendiri dengan mengganti nama sesuai. eg view-exposed-form - view name-pane name.tpl.php Anda (Anda akan memahami nomenklatur dengan melihat tema: informasi di halaman edit tampilan)

sekarang Anda dapat menambahkan css ke masing-masing widget (dihasilkan oleh penangan filter) dalam file template ini dan pengaturan itu akan diterapkan pada filter.

kunjungi http://eureka.ykyuen.info/2011/07/25/drupal-theme-the-exposed-filter-in-views/

dresh
sumber