هل يمكن لأحد أن يريني مثالًا مناسبًا لكيفية إنشاء نوع محتوى جديد في طريقة hook_install للوحدة النمطية؟
أود أيضًا أن أعرف ما إذا كان/ماذا يجب أن أفعل أثناء hook_uninstall لتنظيف فوضى بلدي ؛ قرأت أن هناك بعض الجدل حول إزالة المحتوى ببساطة.
لم أتمكن من العثور على مثال للطريقة الصحيحة لإنجاز هذه المهمة ، سيكون موضع تقدير أي مساعدة!
للإجابة على أسئلتك بالضبط:
إنشاء نوع محتوى في تثبيت ربط : أنت تستخدم node_type_save () لإنشاء نوع المحتوى ، إليك مثال من نموذج الويب. تثبيت:
// Create the default webform type.
$webform_type = array(
'type' => 'webform',
'name' => st('Webform'),
'base' => 'node_content',
'description' => st('Create a new form or questionnaire accessible to users. Submission results and statistics are recorded and accessible to privileged users.'),
'custom' => TRUE,
'modified' => TRUE,
'locked' => FALSE,
);
$webform_type = node_type_set_defaults($webform_type);
node_type_save($webform_type);
node_add_body_field($webform_type);
ما الذي يجب فعله في hook_uninstall : ببساطة نظف نفسك بعد ذلك ، لذا احذف المتغيرات التي أنشأتها وحدتك (باستخدام variable_del () ) ، حذف أي ملفات تم تحميلها بواسطة الوحدة (باستخدام file_unmanaged_delete_recursive () ) ، وحذف أنواع المحتوى المحددة (باستخدام node_type_delete () ) ، إلخ.
أتمنى أن يساعدك هذا!
واحدة من أفضل الطرق للحفاظ على هذه المعلومات في التعليمات البرمجية هي استخدام الميزات . يمكن وضع الميزات في التعليمات البرمجية:
والقائمة تطول.
ميزة واحدة لطيفة حول الميزات هي تكامل drush
drush features
سيعطيك قائمة بجميع الميزات الموجودة في الموقع ، وحالتهاdrush features revert all
سيعيد جميع الميزات إلى ما هو موجود في التعليمات البرمجية (مفيد حقًا للتشغيل بعد النشر)
يساعد هذا يساعد
تحقق من D7 أمثلة الوحدة النمطية. تم تثبيت وإلغاء تثبيت node_example.
قد تكون قادرًا على تجسيد النوع باستخدام أدوات الواجهة ثم إنشاء ميزة (مع وحدة الميزات) واستخراج الأجزاء ذات الصلة في وظيفة التثبيت للوحدة النمطية المخصصة الخاصة بك.
إذا كنت ترغب في إنشاء نوع محتوى جديد مع بعض الحقول ، يمكنك استخدام الكود أدناه.
يعمل هذا الرمز بالنسبة لي بشكل مثالي.
function HOOK_install() {
/* CREATE THE CONTENT TYPE */
$t = get_t();
$node_example = array(
'type' => 'slider',
'name' => $t('Slider Content'),
'base' => 'node_content',
'description' => $t('Add slider content.'),
'body_label' => $t('Slider Description')
);
$content_type = node_type_set_defaults($node_example);
// Create a custom Field with our required field-type.
$field = array(
'field_slider_images' => array (
'field_name' => 'field_slider_images',
'type' => 'image',
),
'field_slider_links' => array (
'field_name' => 'field_slider_links',
'type' => 'text',
'entity_types' => array('node'),
),
);
foreach ($field as $fields) {
field_create_field($fields);
}
// Create a instances of that Field.
$instance = array(
'field_slider_images' => array (
'field_name' => 'field_slider_images',
'entity_type' => 'node',
'bundle' => 'slider',
'label' => t('Slider Image'),
'description' => 'Add Slider Image.',
'settings' => array(
'file_directory' => 'field/document',
'file_extensions' => 'png PNG jpg jpeg JPG JPEG',
'max_filesize' => '10MB',
'title_field' => '',
),
'widget' => array(
'type' => 'image_image',
'weight'=> 10,
),
'formatter' => array(
'label' => t('label'),
'format' => 'image'
),
'settings' => array(
'file_directory' => 'slider-image', // save inside "public://photos"
'max_filesize' => '4M',
'preview_image_style' => 'thumbnail',
'title_field' => TRUE,
'alt_field' => FALSE,
)
),
'field_slider_links' => array (
'field_name' => 'field_slider_links',
'entity_type' => 'node',
'bundle' => 'slider',
'label' => t('Slider Link'),
'widget' => array('type' => 'text_textfield'),
),
);
foreach ($instance as $fieldinstance) {
field_create_instance($fieldinstance);
}
$status = node_type_save($content_type);
node_add_body_field($content_type);
// Replacement rule for the messages.
$t_args = array('%name' => $content_type->name);
if ($status == SAVED_UPDATED) { // update case
drupal_set_message($t('The content type %name has been updated.', $t_args));
}
elseif ($status == SAVED_NEW) { // create case
drupal_set_message($t('The content type %name has been added.', $t_args));
watchdog('node', 'Added content type %name.', $t_args, WATCHDOG_NOTICE, l($t('view'), 'admin/structure/types'));
}
}