it-swarm.asia

قم بإنشاء نوع محتوى جديد على hook_install

هل يمكن لأحد أن يريني مثالًا مناسبًا لكيفية إنشاء نوع محتوى جديد في طريقة hook_install للوحدة النمطية؟

أود أيضًا أن أعرف ما إذا كان/ماذا يجب أن أفعل أثناء hook_uninstall لتنظيف فوضى بلدي ؛ قرأت أن هناك بعض الجدل حول إزالة المحتوى ببساطة.

لم أتمكن من العثور على مثال للطريقة الصحيحة لإنجاز هذه المهمة ، سيكون موضع تقدير أي مساعدة!

11
Jane Panda

للإجابة على أسئلتك بالضبط:

إنشاء نوع محتوى في تثبيت ربط : أنت تستخدم 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 () ) ، إلخ.

أتمنى أن يساعدك هذا!

7
Alex Weber

واحدة من أفضل الطرق للحفاظ على هذه المعلومات في التعليمات البرمجية هي استخدام الميزات . يمكن وضع الميزات في التعليمات البرمجية:

  • أنواع المحتوى
  • حقول CCK
  • أذونات
  • الأدوار

والقائمة تطول.

ميزة واحدة لطيفة حول الميزات هي تكامل drush

drush features سيعطيك قائمة بجميع الميزات الموجودة في الموقع ، وحالتها
drush features revert all سيعيد جميع الميزات إلى ما هو موجود في التعليمات البرمجية (مفيد حقًا للتشغيل بعد النشر)

يساعد هذا يساعد

11
wiifm

تحقق من D7 أمثلة الوحدة النمطية. تم تثبيت وإلغاء تثبيت node_example.

قد تكون قادرًا على تجسيد النوع باستخدام أدوات الواجهة ثم إنشاء ميزة (مع وحدة الميزات) واستخراج الأجزاء ذات الصلة في وظيفة التثبيت للوحدة النمطية المخصصة الخاصة بك.

3
Drew

إذا كنت ترغب في إنشاء نوع محتوى جديد مع بعض الحقول ، يمكنك استخدام الكود أدناه.

يعمل هذا الرمز بالنسبة لي بشكل مثالي.

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')); 
}

}
0
Sanjay