Rumah >pembangunan bahagian belakang >tutorial php >PHP Master | Membuat jenis nod Drupal baru
Drupal adalah sistem pengurusan kandungan yang sangat fleksibel untuk membina laman web. Ia menyediakan banyak ciri hebat dari kotak yang membolehkan kami membina tapak yang komprehensif tanpa menulis sebarang kod PHP. Ia juga menyediakan ciri -ciri untuk menambah lebih banyak fungsi melalui penggunaan modul.
Secara lalai, jenis nod Drupal adalah artikel dan halaman. Ini mungkin baik untuk tapak asas, tetapi jika kita merancang untuk mempunyai laman web yang lebih kompleks, kami akan mahu menambah jenis nod yang berbeza. Kita juga boleh menentukan mereka dengan menulis modul!
Dalam artikel ini, anda akan melihat cara menulis modul Drupal tersuai yang akan memasang jenis nod baru menggunakan Drupal Hooks dan API.
name = productcustomtype description = A new content type of Product package = Product Custom node Type core = 7.x files[] = productcustomtype.install files[] = productcustomtype.module
memasang dan menyahpasang nod
Sebaik sahaja kita mempunyai fail asas untuk modul di tempat, kita boleh mula menulis kod untuk memasang jenis nod tersuai. Cangkuk pertama yang perlu kita laksanakan ialah hook_node_info. Menggunakan cangkuk ini, modul boleh menentukan satu atau lebih jenis nod di Drupal. Pelaksanaan Hook mengembalikan array yang menentukan jenis nod baru yang modul akan ditambah.
Untuk melaksanakan cangkuk ini, tambahkan kod berikut ke ProductCustomType.Module:
name = productcustomtype
description = A new content type of Product
package = Product Custom node Type
core = 7.x
files[] = productcustomtype.install
files[] = productcustomtype.module
Pelaksanaan ini mengembalikan array yang menentukan produk jenis nod baru bersama -sama dengan beberapa sifatnya, seperti namanya, keterangan, jika ia mempunyai tajuk, dan asas (yang digunakan dalam cangkuk yang berbeza untuk jenis kandungan ini).
Seperti yang telah kita nyatakan bahawa jenis nod ini mempunyai tajuk, kita perlu menunjukkan medan teks tajuk apabila borang untuk nod ini dipaparkan untuk menambah kandungan. Untuk melakukan ini, kita perlu melaksanakan cangkuk hook_form.
Hook_form cangkuk digunakan untuk menunjukkan borang yang digunakan untuk membuat/mengedit nod. Cangkuk dilaksanakan dalam ProductCustomType.Module seperti berikut:
<span><span><?php
</span></span><span><span>/**
</span></span><span><span> * Implements hook_node_info()
</span></span><span><span> */
</span></span><span><span>function productcustomtype_node_info() {
</span></span><span> <span>return array(
</span></span><span> <span>'product' => array(
</span></span><span> <span>'name' => t('Product'),
</span></span><span> <span>'base' => 'product',
</span></span><span> <span>'description' => t('You can define new Products here'),
</span></span><span> <span>'has_title' => TRUE,
</span></span><span> <span>'title_label' => t('Product title')
</span></span><span> <span>)
</span></span><span> <span>);
</span></span><span><span>}</span></span>
Kami hanya menggunakan API Drupal yang memberikan pelaksanaan hook_form
dan menambah medan tajuk dengan syarat definisi nod mempunyai set atribut has_title (yang telah kami tetapkan dalam kes kami).
Sebaik sahaja kita telah selesai, kita perlu melaksanakan cangkuk hook_install untuk menambah medan badan ke jenis nod baru.
Tambahkan pelaksanaan ke ProductCustomType.Install seperti berikut:
<span><span><?php
</span></span><span><span>/**
</span></span><span><span> * Implement hook_form()
</span></span><span><span> */
</span></span><span><span>function product_form($node, $form_state) {
</span></span><span> <span>return node_content_form($node, $form_state);
</span></span><span><span>}</span></span>
Kami mula -mula menyimpan semua jenis nod baru yang dicipta oleh modul yang berbeza (termasuk kami) dengan memanggil fungsi Drupal API Node_Types_REBUILD (). Kemudian kami mendapat semua jenis nod dan panggil node_add_body_field () pada jenis kami untuk menambah medan badan.
Sebaik sahaja kami telah melakukan ini, kami dapat mengaktifkan modul kami yang akan memasang jenis nod baru kami. Kemudian kita sepatutnya dapat melihat jenis baru kita apabila kita mengklik tambah kandungan seperti berikut:
Jika kita menambah produk baru, ia juga akan dilihat di halaman rumah Drupal.
Semua modul di Drupal harus membersihkan sebarang data yang mereka buat dalam pangkalan data atau mana -mana jenis yang telah mereka tambah apabila ia dipasang oleh pengguna. Untuk menyokong ini, kami perlu melaksanakan hook_uninstall dalam fail ProductCustomType.install kami seperti berikut:
name = productcustomtype
description = A new content type of Product
package = Product Custom node Type
core = 7.x
files[] = productcustomtype.install
files[] = productcustomtype.module
Kami mula -mula mengetahui semua ID nod yang merupakan nod jenis kandungan yang dipasang. Sebaik sahaja kami telah mengumpul ID, kami menggunakan fungsi API node_delete_multiple () untuk memadam pelbagai nod. Kemudian kami menggunakan fungsi node_type_delete () untuk memadam jenis nod kami.
Sekarang jika kita menyahpasang modul kita, semua nod jenis kita dan jenis kita sendiri harus dipadamkan.
Mewujudkan bidang tambahan
Sebaik sahaja kami telah menambah jenis nod baru, kami mempunyai fungsi yang serupa dengan nod. Tetapi bagaimana jika kita mahu menambah lebih banyak medan bergantung pada jenis nod? Sebagai contoh, jika ia adalah jenis produk maka kita mungkin mahu menambah dua lagi bidang seperti harga dan kuantiti.
Untuk ini, kita perlu terlebih dahulu membuat medan dan kemudian membuat contoh medan pada jenis nod kita. Kami menulis dua fungsi baru dalam Fail ProductCustomType.Install untuk menentukan bidang dan contoh medan.
<span><span><?php
</span></span><span><span>/**
</span></span><span><span> * Implements hook_node_info()
</span></span><span><span> */
</span></span><span><span>function productcustomtype_node_info() {
</span></span><span> <span>return array(
</span></span><span> <span>'product' => array(
</span></span><span> <span>'name' => t('Product'),
</span></span><span> <span>'base' => 'product',
</span></span><span> <span>'description' => t('You can define new Products here'),
</span></span><span> <span>'has_title' => TRUE,
</span></span><span> <span>'title_label' => t('Product title')
</span></span><span> <span>)
</span></span><span> <span>);
</span></span><span><span>}</span></span>
Kami kemudian membuat fungsi add_custom_fields () dalam produkCustomType.install yang akan membaca array dari dan membuat medan dan contoh.
<span><span><?php
</span></span><span><span>/**
</span></span><span><span> * Implement hook_form()
</span></span><span><span> */
</span></span><span><span>function product_form($node, $form_state) {
</span></span><span> <span>return node_content_form($node, $form_state);
</span></span><span><span>}</span></span>
Sekarang kita hanya boleh memanggil fungsi add_custom_fields () dalam produkCustomType_install () supaya contoh medan dan medan dipasang apabila modul dipasang.
<span><span><?php
</span></span><span><span>/**
</span></span><span><span> * Implements hook_install().
</span></span><span><span> */
</span></span><span><span>function productcustomtype_install() {
</span></span><span> <span>node_types_rebuild();
</span></span><span> <span>$types = node_type_get_types();|
</span></span><span> <span>node_add_body_field($types['product']);
</span></span><span><span>}</span></span>
Kami juga perlu mengemas kini Fungsi ProductCustomType_uninstall () untuk menghapuskan medan dan contoh medan.
<span><span><?php
</span></span><span><span>/**
</span></span><span><span> * Implements hook_uninstall().
</span></span><span><span> */
</span></span><span><span>function productcustomtype_uninstall() {
</span></span><span> <span>$ournewtype = 'product';
</span></span><span> <span>$sql = 'SELECT nid FROM {node} n WHERE n.type = :type';
</span></span><span> <span>$result = db_query($sql, array(':type' => $ournewtype));
</span></span><span> <span>$nodeids = array();
</span></span><span> <span>foreach ($result as $row) {
</span></span><span> <span>$nodeids[] = $row->nid;
</span></span><span> <span>}
</span></span><span> <span>node_delete_multiple($nodeids);
</span></span><span> <span>node_type_delete($ournewtype);
</span></span><span><span>}</span></span>
Pasang modul sekali lagi dan klik pada produk untuk menambah produk baru dan kita harus melihat dua bidang seperti yang ditunjukkan di bawah:
Selepas kita menyimpan nod dan melihatnya dalam pratonton, kita akan melihat bidang seperti berikut:
Kesimpulan
Drupal CMS menyediakan banyak cangkuk berguna dan API yang kuat yang membolehkan kami melakukan pelbagai penyesuaian. Dalam artikel ini, kami dapat mencipta jenis node yang baru yang akan muncul di bahagian kandungan Drupal. Dan menggunakan API Drupal, kami juga melampirkan medan ke jenis nod baru ini supaya sesiapa sahaja boleh menambah kandungan menggunakan jenis nod baru. Oleh itu, bersenang -senang membuat jenis nod baru anda untuk laman Drupal anda.
imej melalui Fotolia
soalan yang sering ditanya mengenai membuat jenis nod Drupal baru
Apakah jenis nod Drupal dan mengapa penting? oleh konteks maklumat. Ini boleh menjadi catatan blog yang mudah, artikel, cerita berita, topik forum, atau tutorial, antara lain. Jenis nod adalah penting kerana mereka menyediakan cara berstruktur untuk memasukkan, memaparkan, dan menguruskan kandungan dalam Drupal. Mereka membenarkan penyesuaian input data, pengesahan, dan tetapan paparan, yang dapat meningkatkan pengalaman pengguna dan fungsi keseluruhan tapak Drupal. >
Mewujudkan jenis nod baru dalam Drupal adalah proses yang mudah. Pertama, navigasi ke menu "Struktur" di Dashboard Drupal Admin anda, kemudian pilih "Jenis Kandungan". Klik pada butang "Tambah Jenis Kandungan". Anda akan diminta untuk mengisi nama, keterangan, dan tetapan untuk jenis nod baru anda. Sebaik sahaja anda telah mengisi maklumat yang diperlukan, klik pada butang "Simpan dan Urus Bidang" untuk menambah medan ke jenis nod baru anda. 🎜> Ya, anda boleh menyesuaikan medan dalam jenis nod Drupal anda. Selepas membuat jenis nod baru, anda boleh menambah, mengedit, atau memadam medan yang diperlukan. Ini membolehkan anda menyesuaikan jenis nod untuk keperluan kandungan khusus anda. Sebagai contoh, anda mungkin menambah medan teks untuk ringkasan artikel, medan imej untuk imej yang dipaparkan, atau medan tarikh untuk tarikh penerbitan.
Drupal menyediakan tab "Urus Paparan" untuk setiap jenis nod. Ini membolehkan anda mengawal bagaimana setiap medan dipaparkan apabila nod dilihat. Anda boleh menyesuaikan label, format, dan susunan setiap medan. Anda juga boleh mengumpulkan medan ke dalam mod paparan tersuai, seperti pandangan penggoda atau paparan kandungan penuh. Cara yang kuat untuk membuat, mengemas kini, dan memadam nod secara pemrograman. Ini berguna untuk tugas -tugas seperti mengimport kandungan dari sistem lain, menghasilkan data ujian, atau membuat aliran kerja tersuai. API Node adalah sebahagian daripada sistem teras Drupal, jadi ia boleh didapati dalam semua pemasangan Drupal.
Bagaimana saya boleh mengawal akses ke nod Drupal saya? Anda boleh menetapkan kebenaran berdasarkan peranan pengguna, membolehkan anda mengawal siapa yang boleh melihat, membuat, mengedit, dan memadam nod setiap jenis. Anda juga boleh menggunakan API akses nod Drupal untuk membuat peraturan akses yang lebih kompleks.
Atas ialah kandungan terperinci PHP Master | Membuat jenis nod Drupal baru. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!