在Drupal中动态创建内容类型

时间:2012-01-23 01:33:49

标签: drupal drupal-7 drupal-modules

我们的网站要求之一是拥有一种内容类型,让您可以动态决定内容类型的总量。

例如,如果我指定一个数字10,那么它应该连续生成内容类型,类型为'textarea',另一个类型'radio'创建10次。

基本上以编程方式打破它,它将创建:

<?php
for(i=0;i<10;i++)
{
echo "<input type = 'textarea'></input>";
echo "<select><option>1</option><option>2</option></select>";
} 
?>

如果我涉及简单的PHP文件,这是非常简单的,但是使用Drupal 7的内容类型(CCK),它构成了比它应该是恕我直言的更大的挑战。我已经尝试过探索模块,让您可以动态创建内容类型,并考虑以编程方式创建自定义内容类型,这似乎是另一项挑战。

我很好奇是否有人有替代方案并且之前已经涉足过这个挑战。非常感谢您的回答。

谢谢你们

1 个答案:

答案 0 :(得分:3)

要在drupal 7中创建内容动态类型,您需要遵循以下过程:

更新*

1)使用hook_menu()创建一个菜单路径,该路径使用drupal_get_form()。这样您就可以收集用户输入的所有数据,以便创建动态内容。

示例:

$items['newpost'] = array(
'title' => 'Create Post',
'description' => 'The main noticeboard',
'page callback' => 'drupal_get_form',
'page arguments' => array('customvishal_create_content'),
'access callback' => TRUE,
);
return $items;

2)然后使用:

function customvishal_create_content($form, &$form_submit) // To create your form on that page
function customvishal_create_content_validate($form, &$form_state) // for any kind of validation


function customvishal_create_content_submit($form, &$form_state)
  • 在此功能中,您可以将值提交到新的内容类型中。
  • 您可以在此处调用以下功能。

3)创建一个数组,其中包含有关您的内容类型的元数据。

// Define the node type.
$mystuff = array(
'type' => 'mystuff',
'name' => $t('my new Stuff'),
'base' => 'node_content',
'description' => $t('This is an example node type.'),
'body_label' => $t('Content')
 );

 // Set defaults.
$content_type = node_type_set_defaults($mystuff);

4)使用node_type_save()来保存/声明您的内容类型。

node_type_save($content_type);

5)创建字段,然后附加到您的内容类型。

foreach (_mystuff_installed_fields() as $field) {
field_create_field($field);
}

// Create instances of fields.
foreach (_mystuff_installed_instances() as $instance) {
$instance['entity_type'] = 'node';
$instance['bundle'] = $mystuff['type'];
field_create_instance($instance);
}