Заголовок наверное полный бред. Сейчас попытаюсь донести смысл вопроса.
Есть два типа материала: "Ресторан" и "Отзыв"
Есть словарь: "город"
Словарь присвоен типу материала "ресторан".
В материале "Отзыв" есть поле Node Reference, которое связывает с материалом типа "Ресторан"
А теперь проблема: как сделать так, чтобы при создании материала типа "отзыв" мы могли выбрать сначала город (словарь таксономии) и потом в соответствии с выбранным термином выбрать в поле Node Reference материал типа "ресторан" (чтобы в списке остались только те материалы типа "ресторан" которые принадлежат данному термину "город")?
Пример.
Термину "Иркутск" принадлежат следующие материалы типа "ресторан":
- ресторан 1
- ресторан 2
Термину "Москва" принадлежат следующие материалы типа "ресторан":
- ресторан 3
- ресторан 4
Мы создаем материал типа "отзыв" как-то выбираем город Иркутск и в списке при выборе поля Node Reference остаются только:
- ресторан 1
- ресторан 2
Выведите на пусть истинный
Комментарии
1) создаешь свой модуль
2) пишешь функцию
$items = array();
$items['<имя модуля>-filter'] = array(
'page callback' => '<имя модуля>_filterlist',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
'access arguments' => array('access content'),
);
return $items;
}
3) объявляешь функцию
switch ($form_id) {
case '<имя материала-отзыва>_node_form':
$form['taxonomy'][<номер словаря с городами>]['#ahah'] = array(
'event' => 'change',
'path' => '<имя модуля>-filter',
'wrapper' => 'edit-field-<имя материала-ресторана>-nid-nid-wrapper',
'method' => 'replace',
'effect' => 'fade'
);
break;
}
}
4) объявляешь функцию
$sql='SELECT DISTINCT(node.nid) AS nid,
node.title AS node_title
FROM node node
INNER JOIN term_node term_node ON node.vid = term_node.vid
WHERE (node.status <> 0) AND (node.type in ("<имя материала-ресторана>"))'.((count($_POST['taxonomy'][<номер словаря с городами>])>0)? ' AND (term_node.tid IN ('.join(', ',$_POST['taxonomy'][<номер словаря с городами>]).'))' : '').'
ORDER BY node_title ASC';
$res=db_query($sql);
$options=array();
while ($row=db_fetch_array($res)){
$options[]='<option value="'.$row['nid'].'">'.htmlspecialchars($row['node_title']).'</option>';
}
$output = '<label for="edit-field-<имя материала-ресторана>-nid-nid">Ресторан: <span title="Обязательное поле" class="form-required">*</span></label>
<select id="edit-field-<имя материала-ресторана>-nid-nid" class="form-select required" name="field_<имя материала-ресторана>[nid][nid]">'.join("\n",$options).'</select>';
drupal_json(array('status' => TRUE, 'data' => $output));
}
Заменяешь <имя модуля>, <имя материала-ресторана>, <имя материала-отзыва>, <номер словаря с городами> на свои названия, подправляешь html-код (в случае если он не совпадает с моим), подключаешь модуль, правишь синтаксические ошибки (возникшие в результате копи-паста-реплэйса), и наслаждаешься жизнью
ух как вы меня послали так послали ))) спасибо, попробую. Видимо все-таки придется освоить азы модулестроения, как бы я от этого не отталкивался )
Не бойся, это не сложно. Создаешь папку с именем модуля, создаешь файл <имя модуля>.info и пишешь в него:
name = <имя модуля>
description = Alter form.
core = 6.x
package = "other"
и еще файл <имя модуля>.module а в нем вышеуказанные функции
а есть решения для 7?
да для 7 ки и не только для терминов но и для нод. если одна нода привязана по нодереференсе к другой ноде... то при выборе в селекторе заголовки этих других нод в другом селекторе появлялись только привязаные к это ноде (из первого селектора) связные ноды