Требуется для статей выводить похожие по заголовку и такие же по типу материалы. Выводить необходимо не только заголовок похожего материала, но и другие поля.
1) Думал сделать через Views, но не получается настроить контекстный фильтр. Погуглил по этому поводу - ничего толкового не обнаружил.
2) Знаю как сделать вывод похожих по тегам материалов (через Views). Но материалов очень много и они довольно разнородны - вариант с тегами не подходит. Точнее не подходит вручную прописывать теги. Может как-то можно автоматически прописывать теги на основании слов заголовка? Т.е. если заголовок "Очень интересная статья", то у материала будут теги: очень, интересная, статья.
Комментарии
<?php
hook_node_insert($node) {
$title = preg_split ('/\s+/' , $node->title) ;
$title = implode(',',$title); $node = node_load($node->nid);
$node->field_tag[LANGUAGE_NONE][0]['value'] = $title;
node_save($node);
}
?>
регулярку доделать, или использовать что то другое.
Спасибо. Функцию hook_node_insert необходимо в template.php прописывать, правильно понял?
или в модуле
themename_node_insert
Ок, попробую.
Еще вопрос правильно ли понял код:
<?php
hook_node_insert
($node) {$title = preg_split ('/\s+/' , $node->title) ; # достаем заголовок ноды и делим его на слова
$title = implode(',',$title); # преобразуем набор слов в строчку вида: "слово1,слово2,слово3" $node = node_load($node->nid); # загружаем массив данных ноды, основываясь на ее nid
$node->field_tag[LANGUAGE_NONE][0]['value'] = $title; # элементу массива field_tag присваиваем значение "слово1,слово2,слово3"
node_save($node); # сохраняем обновленный массив
} ?>
Таким образом при создании ноды теги вводить не надо, они сгенерируются из заголовка при первом же обращении к ноде. Все верно?
примерно, я код не тестил.
алгоритм такой:
1. сохранили ноду, и вызвали хук.
2. загрузили сохраненную ноду.
3. преобразовали заголовок в текст через запъятую (как в форме тегов)
4. добавили в загруженную ноду значение созданного поля.
5. сохранили ноду.
потом хаки submit или update, при обновления заголовка.
те хаки вызывают функцию.
Хук не работает. Догадываюсь почему. $node->field_tag - это массив. Т.е. слова, на которые мы поделили заголовок, надо добавлять как элементы массива, а не в формате "слово1,слово2,слово3". Это формат для ручного ввода.
+ Когда мы пишем теги вручную, они автоматически добавляются в словарь тегов. Тоже самое надо делать при генерации тегов на основании заголовка.
Есть мысль, что проще написать js, который при создании нового материала будет брать значение, введенное в поле Заголовок, делить это значение на слова, преобразовывать в формат "слово1,слово2,слово3" и вставлять все это в поле Теги на странице редактирования.
да, действительно.
работает в модуле, сохраняет массив.