Bagaimana cara saya mengirimkan variabel dari modul khusus ke file templatnya?


8

Saya perlu tahu metode paling sederhana untuk mengirimkan variabel dari modul khusus ke file templatnya. Saya telah membuat custom.module dan menempatkan custom.tpl.php di folder modul.

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {

    $setVar = 'this is custom module';
    return theme('custom', $setVar);    
}

saya telah menambahkan fungsi tema tetapi tidak berfungsi, dapatkah ada yang menyarankan saya apa yang salah dengan kode ini

function theme_custom($arg) {
  return $arg['output'];
}

function custom_theme() {
  return array(
    'Bluemarine' => array(
        'variables' => 'output',
        'template' => 'Bluemarine',
     ),
  );
}

Jawaban:


6

Secara independen dari versi Drupal yang Anda tulis modulnya, ada dua kesalahan dalam kode Anda:

  • Anda mendefinisikan "Bluemarine" sebagai fungsi tema, tetapi kemudian Anda memanggil theme('custom'), yang akan memanggil fungsi tema "custom"
  • Jika Anda mendefinisikan "custom" sebagai fungsi tema yang menggunakan file template, maka theme_custom()tidak pernah dipanggil

Jika Anda menulis kode untuk Drupal 6, maka kode tersebut harus sama dengan yang berikut. Saya mengambil asumsi nama untuk fungsi tema tersebut custom.

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_theme() {
  return array(
    'custom' => array(
      'arguments' => array('output' => NULL),
      'template' => 'custom',
     ),
  );
}

function custom_page() {
    $output = 'This is a custom module';
    return theme('custom', $output);    
}

function theme_custom($output) {
}

File template akan memiliki akses ke $output, dan ke variabel apa pun yang ditetapkan template_preprocess_custom(), jika modul Anda mengimplementasikannya.

Misalnya, Anda bisa menerapkan kode yang mirip dengan yang berikut:

function template_preprocess_custom(&$variables) {
  if ($variables['output'] == 'This is a custom module') {
    $variables['append'] = ' and I wrote it myself.";
  }
}

Dengan kode ini, file templat memiliki akses ke $outputdan $append.

Sebagai contoh fungsi tema yang menggunakan file template, Anda dapat melihat theme_node () , yang didefinisikan dalam node_theme () , dan yang menggunakan node.tpl.php sebagai file template; fungsi preprocess yang diterapkan oleh modul Node untuk fungsi tema tersebut adalah template_preprocess_node () .


Terima kasih Kiam, jelas melewatkan komentar pertama OP tentang menggunakan D6. +1
Laxman13

Terima kasih Kiam, template_preprocess_custom (& $ variabel) melakukan trik
Kamran Akhter

Sekarang saya ingin memindahkan tpl ke folder tema, bagaimana saya bisa melakukannya?
Kamran Akhter

@ KamranAkhter Itu pertanyaan yang berbeda. :-)
kiamlaluno

3

Anda memanggil fungsi tema yang salah. Alih-alih function theme_customseharusnya function theme_Bluemarine. Anda juga perlu mengirimkan array ke variabel variabel hook_theme () . Lihat contoh sederhana di sini .

Menggunakan contoh Anda (setelah mengubah templat dan fungsi tema custom):

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {
  $setVar = 'this is custom module';
  return theme('custom', array('output' => $setVar));
}

function custom_theme() {
  $path = drupal_get_path('module', 'custom');
  return array(
    'custom' => array(
        'variables' => array('output' => null),
        'template' => 'custom',
     ),
  );
}

Sekarang di custom.tpl.php hanya perlu <?php print $output; ?>


Terima kasih atas balasan, contoh yang Anda berikan adalah modul simpul dan saya punya modul non simpul. Saya hanya perlu cara untuk mengirimkan variabel ke file tpl, saya menggunakan bantuan drupal 6.plz
Kamran Akhter

Terima kasih atas balasan, ini memberi saya kesalahan. Tidak ada file atau direktori seperti itu sebenarnya mengharapkan file custom.tpl.php di folder modul yang sudah saya miliki sehingga dalam kode bluemarine akan diganti oleh kustom. Bluemarine adalah tema drupal yang saya gunakan.
Kamran Akhter

mengubah kode di atas dan memberi saya layar putih kosong apa yang harus saya lakukan tolong bantu
Kamran Akhter

Saya mengubah kode, dan saya membuatnya bekerja di situs saya.
Laxman13

Saya hanya menyalin tempel kode di atas tetapi tidak berfungsi
Kamran Akhter
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.