我们的网站要求之一是拥有一种内容类型,让您可以动态决定内容类型的总量。
例如,如果我指定一个数字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),它构成了比它应该是恕我直言的更大的挑战。我已经尝试过探索模块,让您可以动态创建内容类型,并考虑以编程方式创建自定义内容类型,这似乎是另一项挑战。
我很好奇是否有人有替代方案并且之前已经涉足过这个挑战。非常感谢您的回答。
谢谢你们
答案 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);
}