我需要将用户限制为给定内容类型的单个节点。因此,用户只能创建一个TypeX节点。我想出了两种方法。哪个更好用...
1)编辑node / add / typex菜单项以检查数据库以查看用户是否已经创建了TypeX节点,以及他们是否有权创建它。
2)当用户创建TypeX节点时,将它们分配给不具有创建该类节点的权限的其他角色。
在方法1中,我必须在每个页面加载时进行额外的数据库调用,以查看它们是否应该能够看到“Create TypeX”(node / add / typex)。但是在方法2中,我必须保持两个不同的角色。
您会使用哪种方法?
答案 0 :(得分:4)
http://drupal.org/project/node_limit
更新:这更好,一周前更新,第一个没有在一年更新
答案 1 :(得分:0)
如果您愿意,可以学习OnlyOne模块(沙箱)的代码,以查看实现此目的的简单方法。
Only One模块允许为每种语言创建Only One节点 在此配置的选定内容类型中。
/**
* Implements hook_form_alter().
* @param $form
* @param $form_state
* @param $form_id
*/
function onlyone_form_alter(&$form, &$form_state, $form_id) {
$onlyone_content_types = variable_get('onlyone_node_types');
//getting the name of the node type
$node_type = substr($form_id, 0, -10);
//Verifying if the new node should by onlyone
if (isset($onlyone_content_types) && in_array($node_type, $onlyone_content_types, TRUE)) {
$node = $form_state['node'];
//if we are trying to create a new node
if (!isset($node->nid) || isset($node->is_new)) {
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', $node_type);
if (drupal_multilingual()) {
global $language;
$query->propertyCondition('language', $language->language);
}
$result = $query->execute();
//if we have one node, then redirect to the edit page
if (isset($result['node'])) {
$nid = array_keys($result['node'])[0];
drupal_goto('node/' . $nid . '/edit');
}
}
}
}
披露:我是模块OnlyOne的维护者。