Привет сообществу!
Подскажите как можно через кастомный модуль сделать свой каталог без использования Views?
Идея такая:
Создать страницу, получать значения из URL сделать единое представление для вывода всевозможных выборок товара в зависимости от вложенности URL'a
Вопрос #1
И тут уже первая проблема, предположим я создала страницу:
<?php
function custom_menu()
{
$items['catalog'] = [
'title' => 'Каталог', //page title
];
?>
Как бы так сделать что бы последующие уровни вложенности URL'a тоже шли на этот роут?
Вопрос #2
Далее подразумевается, что я получила коллекцию с нодами отфильтровав по типу материала
<?php
$nodes = node_load_multiple([], ['type' => "catalog"]);
?>
Как сделать вывод этого счастья через темплейт в модуле + запилить пагинацию?
P.S
Я понимаю что мои вопросы на уровне "почитай доки, там всё есть", моя проблема в том, что я не смогла адекватно спросить у гугла то, что бы вывело меня на зацепки к необходимой терминологии. По этому прошу не решать мои проблема, а просто бросаться в меня ссылками или ключевыми словами (желательно по английски) по теме вопросов.
Благодарю всех откликнувшихся!
Комментарии
Поясните.
В целом, примерно следующий путь:
Под этим пунктом я имела в виду вложеность урла после основной страницы /catalog по типу /catalog/category/subcategory/etc
Благодарю за ссылки!
Ну... Хук меню позволяет организовать
демоническиединамические пути, и передавать их в качестве аргументов в коллбек страницы:<?php
$items['catalog/%/%/%'] = array(
// ...
'page callback' => 'mymodule_page_callback',
'page arguments' => [1, 2, 3]
// ...
); // и сам коллбек:
function mymodule_page_callback($category, $subcategory, $etc) {}
?>
Осталось определить чем в пути должно быть это:
Вы потратите много времени и получите посредственный результат. Такие вещи в друпале делаются именно на вьюсе, если же очень не хочется - то лучше взять другой движок.
Спасибо, в целом я согласна, это проще сделать на том-же laravel или yii но увы писать всю логику бэкенда я не потяну сейчас по уровню знаний. Если вы знаете какой-нибудь инструмент, что бы построить мостик между бекендом на друпал и клиентской частью на каком-нибудь ооп микро-фреймворке буду очень благодарна за совет.
Нет, я с таким не сталкивался.
Интересно что вы хотите получить в итоге, т.е. какова общая задача?
Простой каталог с чистыми ссылками, которые я буду парсить как query параметры. типа catalog/category/subcategory/etc
плюс хочу на разные роуты собрать кастомные query что бы пробрасывать их через один и тот-же темплейт без необходимости клонировать представления. Звучит дико, но мне в проекте часто нужно менять какую-то мелочь во вьюшке и затем во всех её клонах, по этому ищу способ собрать по типу как в MVC разные контроллеры выводить через одно представление.
Первое делается через контекстные фильтры без проблем.
Второе - во вьюшке можно создать несколько страниц и при редактировании выбирать либо изменить во всех, либо в конкретной.
Интересно, изучу!
По второму пункту знаю, но совсем то что хотелось бы, опять таки кога в одном представлении куча разных страниц и блоков, часто при массовом изменении сбиваю фильтрацию, которая как раз таки индивидуальна, хотелось бы её вывести отдельно как контроллер.
В любом случае благодарю за участие
ООП, контроллеры, MVC это надо на восьмёрке делать. На семёрке скролл у мышки сломается, когда число строк модуля перевалит за 2000, и эти спагетти будут совершенно не читаемые.
Спасибо, 8ку уже осваиваю маленькими шажками. Но один из проектов хочется малой кровью добить, по этому ищу аналоги
В конце концов, есть же сет модулей семплов ооп и для 7ки вот я и мучаю себя и сообщество в поисках идей .
Малой кровью лучше через вьюс)))
Я бы такую задачу решал бы уже на 8-ке тем более что views там в core
Если кому будет полезно, нашла для себя вот такой вариант, со своей вольной интерпретацией: https://www.phase2technology.com/blog/building-energygov-without-views
Возможно вопрос не актуален. Но всё же опишу своё решение, вроде бы оно очень подходит для решения вашей проблемы.
Однажды я устал делать несколько одинаковых правок мышкой во всех вьюсах.
Но от самого вьюса отказываться не хотел, так как не хотел изучать тонкости запросов к БД.
В итоге взял от вьюса его умения делать запросы к БД (в разделе КРИТЕРИИ ФИЛЬТРАЦИИ), а вывод (ПОЛЯ) листингов (товаров, и всего что может выдавать вьювс) писал ПХП кодом (node_load_multiple работает очень быстро, как правило на одной странице листинга товаров, вам не понадобится грузить более 13 node).
Во всех вью у меня осталось только одно поле: nid (для вьюх node).
Таким образом вьюха которая выводит только поле Айдишник любой сущности отрабатывает оооочень быстро, даже если вы захотите вывести все >5000 nid которые у вас есть (такое конечно в практике бессмысленно).
И самая главная мысль: этот подход реализовал с помощью:
$view = views_get_view('foo');
$view->set_display('page');
$view->execute();
$views_get_result = $view->result;
print_r($views_get_result); // --> выведет массив со списком nid которые подобрала вью по заданным фильтрам.
Подробнее про views_get_view http://xandeadx.ru/blog/drupal/633.
Также замечу, что я без проблем реализовал листинги товаров с совремённой фильтрацией, пагинацией, AJAX подгрузкой и блэк джеком. (фичи пагинации, аджакса написал сам, то есть это теперь не зависит от views).
Фича AJAX фильтрации наполовину от views (в её (!) открытые фильтра летят GET параметры), но вывод HTML виджетов, в которые тыкают посетители, полностью под моим контролем, они не знают ничего про Views, а Views про них.