我正在开发一个需要“职业”页面的Drupal网站。我有一份包含20个左右工作的清单,以及30个左右可以获得这些工作的地点。
我要做的就是这样做,当一份工作变得可用时,所有需要做的就是用户选择工作头衔及其可用的位置,它将创建带有工作描述的帖子以及我在该位置信息的其他信息。
我遇到的另一个问题就是这样做我可以有多个实例... ex。如果在两个或更多地点提供相同的工作。
我一直试图把我的想法包括在内,我将如何做这项工作,并且空白。如果有人有想法指出我正确的方向,我们将不胜感激。
答案 0 :(得分:3)
听起来像一个非常常见的用例;如果是我,我会像这样接近它:
为您的管理员创建自定义表单,例如:
function MYMODULE_add_job_form($form, &$form_state) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#maxlength' => 255,
'#required' => TRUE
);
// Load the vocabulary (the machine name might be different).
$vocabulary = taxonomy_vocabulary_machine_name_load('location');
// Get the terms
$terms = taxonomy_get_tree($vocabulary->vid);
// Extract the top level terms for the select options
$options = array();
foreach ($terms as $term) {
$options[$term->tid] = $term->name;
}
$form['locations'] = array(
'#type' => 'select',
'#title' => t('Locations'),
'#options' => $options,
'#multiple' => TRUE,
'#required' => TRUE
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Add job')
);
return $form;
}
为表单创建自定义提交处理程序,以便以编程方式添加新节点:
function MYMODULE_add_job_form_submit($form, &$form_state) {
$location_tids = array_filter($form_state['values']['locations']);
$node = new stdClass;
$node->type = 'job';
$node->language = LANGUAGE_NONE;
node_object_prepare($node);
$node->title = $form_state['values']['title'];
$node->field_location_term_ref[LANGUAGE_NONE] = array();
foreach ($location_tids as $tid) {
$node->field_location_term_ref[LANGUAGE_NONE][] = array(
'tid' => $tid
);
}
node_save($node);
$form_state['redirect'] = "node/$node->nid";
}
您显然需要为该表单添加页面回调,并且您可能需要进行一些小的更改(字段名称等),但它应该为您提供一个良好的起点。您还需要在某个时刻加载位置分类术语以提取您提到的描述信息...您可以使用taxonomy_term_load()
来执行此操作。