Вы здесь

Как использовать Drupal?

Drupal гибкая система. В понимании многих пользователей она является таковой, потому что в ней есть модули CCK и VIEWS. Использование ССК и VIEWS подходит для небольших и средних сайтов. Это удобно.

Давайте поразмышляем на тему использования и неиспользования этих модулей.

Вот реальная задача, которую пытаюсь решить. (судя по топикам на drupаl.ru и drupаl.org задача актуальна для многих)

Стоит задача, создать простой каталог товаров.

Требования.
I. Ввод.
Форма ввода элемента каталога должна иметь поля:
1. категория (select, text)
2. подкатегория, зависимо от того что выбрано в "категория" (select, text)
3. цена (int)
4. дата выпуска (date)
5. картинка, одна и более ()
6. описание (text)
7. Кнопки "сохранить", "отмена"

II. Отображение.
Форма отображение элемента каталога.
Выводятся поля которые были описаны в I. как недоступный для форматирования текст.
Должна быть функциональность комментирования этого элемента.

III. Поиск
Форма поиска состоит из полей
1. ввод ключевых слов. (textbox)
2. "дата ОТ" (selectbox)
3. "дата До" (selectbox)
4. "цена ОТ" (textbox)
5. "цена ДО"(textbox)
6. "категория" (textbox)
7. "подкатегория" (зависимо от того что выбрано в "категория")
Должна осуществляться проверка правильности ввода полей:
"дата ОТ" должна быть меньше "дата ДО"
"цена ОТ" должна быть меньше "цена ДО"

Это был набросок требований.

Некоторые из возможных вариантов реализации.

вариант 1. Реализовать с "0" на php и mysql.
примерно так - создать таблицу "товары" с полями "название", "дата ОТ", "дата До","цена ОТ", "категория", "подкатегория".
создать таблицы-справочники "категория" и "подкатегория" (связь один-ко-многим) и написав соответвующие формы вводы, вывода, поиска на php.

вариант 2. Использовать Drupal и модули CCK и VIEWS.
Создаем новый типа ноды "продукт". Добавляем в этот тип материала поля: "дата ОТ", "дата До","цена ОТ", "категория", "подкатегория". Последние 2 ( "категория", "подкатегория") можно использовать как термины одного иерархического словаря (нужно добавить модуль hierarchical_select и content_taxonomy) или использовать модуль dependantDropdown.
Для полей с датами вероятно можно использовать decimal в виде selectbox задав вручную возможные значения от 1999 до 2008 (в зависимости от ситуации, в данном случае продукт не может быть произведен раньше 1999 и позднее 2008).
Для цен decimal в виде текстбокса.
для рисунка тип поля image.
Для описания - оставить стандартное поле "основной текст".
Форма вроде как ввода готова.
друпал создаст таблицу в БД content_type_продукт. с полями vid (vocabulary id), nid (node id), "дата ОТ", "дата До","цена ОТ", "категория", "подкатегория".

Форма отображения собственно уже тоже готова.

Поиск. Тут сложнее. Сделать фильтр "от" и "до" во вьюс сложнее. По умолчанию на одно поле может накладываться только один фильтр. Однако это сделать можно. (На drupal.org есть статья) Как создать поиск по ключевым словам с одновременным применением фильтров средствами друпал и вьюс не знаю.

Вариант 3. Вариант только теоритический.

Создаем тип ноды "продукт".
В БД Друпала создаем таблицы-справочники "категория" и "подкатегория" (связь один-ко-многим), таблицу "товары" с полями "ИД ноды", "дата ОТ", "дата До","цена ОТ", "категория", "подкатегория".
В код ноды "продукт", добавляем код который отображает поля для ввода "дата ОТ", "дата До","цена ОТ", "категория", "подкатегория" и код который сохраняет введенные значения в таблицу.
Для поиска создаем page, в которой пишем код формы для поиска на php и вывода списка нод (о том как выводить ноды в список кажется уже написано немало статей)

Обсуждение вариантов.
Первый вариант возможно будет самым быстрым, с использованием индексации и других примочек такой каталог сможет работать с большим количеством записей.
Однако если одновременно необходим базовый функционал сайта - авторизация, роли- права, таксономия, размещения новостей, комментарии и много другое, что мы можем получить используя движок готовой ЦМС - придется оочень попотеть.

Второй вариант. Мы уже имеет базовый функционал сайта, Друпал. На базе конструктора (сск и вьюс) создаем "довесок" к сайту. Но, во первых он возможно не даст всей необходимой функциональности, как например с поиском. Во-вторых, как это работает с БД. Пока не могу утверждать, но при поверхностном просмотре БД друпала с установленными сск и вьюс, можно сделать предположение что фильтр вьюс будет делать запросов к БД значительно больше чем в варианте 1.

Вариант три - возможно он объединит недостатки двух предыдущих вариантов :-)
Я не программист и мне сложно определить трудозатратность этого варианта. плюс я пока не имею конкретного представления по его реализации (где редактировать код ноды, как писать форму поиска и тд).

Программисты друпал, что можете сказать о варианте 3?

Комментарии

Изображение пользователя Separator@drupal.org

Смотря на какое количество пользователей и продуктов расчитанно. Если относительно (чего правда не знаю) не большое, то можно использовать 2 вариант. Но если это будет крупный сайт с посещением >1000, то только 3 вариант.
Преимущества 3 варианта в том, что он создает для управлений/доступа к продуктам количество запросов примерно равно - друпал со всем нужным функционалом + запросы варианта 1.
2 вариант как вы уже отметили для не больших сайтов, у которых доступной вам мощности сервера с избытком хватит на генерируемые этими модулями запросы к базе.

Изображение пользователя kabiev

Separator@drupal.org, спасибо :-)

На данный момент я пытаюсь разобраться в том, какое место является самым узким в варианте 2 и каким образом в 3-м варианте избежать этих недостатков.

Возникло несколько вопросов относительно поиска по ключевым словам.
Можно ли вообще средствами друпала реализовать поиск по ключевым словам и выборкой по цене (от и до) одновременно?
(я не программист :-))

То что в друпале хранится много нодов само по себе БД вроде как не грузит.
Что создает нагрузку на БД.
1. Создание Ноды.
1. Из таблицы node_field_instance тянуться поля, затем node_field тянуться их описания (полей).
2. так же делается запрос к term_node на проверку не прикреплено ли к этому типу ноды какой либо словарь.
3. hierarchical_select тянет из таблицы term_data, term_hierarchy значения для подстановки в поля.
При сохранении ноды идет запись в таблицы node, node_revisions

Вот что приходит при первом расмотрении. Для более побробного описания нужно разбираться в коде пхп, в этом я не силен.
Поэтому думаю что упустил многое. Если кто то можед добавиьт/подправить - буду очень рад :-)

2. отображение ноды
Второй момент, создающий нагрузку - рендеринг ноды(это вроде так называется, когда система тянет даные из БД и создает ноду).

В этом случае делаются запросы к таблицам
1. node
2. node_revisions
3. content_type_нашанода
4. при использовании словарей (как в нашем случае) так же идет запрос к term_data (для отображения названия категории, в content_type_нашанода хранится ид категории)

3 Поиск/фильтр.

Собствено фильтр...
Так, если использовать форму как то - выбор категории в одном селектбоксе, и автоматическое заполнение второго селектбокса подкатегориями выбранной в первом селектбоксе категории (что понаписал... :-) ) и ввод интервала для цен и дат (поля цена от - до, дата от-до)
Запросы будут примерно следующими.
1. запрос к term_data при выборе селектбоксе (выбирает категорию)
2. при выборе категории в селектбоксе делается запрос к term_hierarchy, таблица "дерево" где выбираются ИД подкатегории нужной нам категории.
3. делается запрос к term_data выбирающий нужные нам названия по ИД которые мы получили из предыдущего запроса.
Далее пользователь вводит цену "от- до", дату "от-до" (для цены просто целочисенные текстбоксы, для даты - заданный набор значений - годов. заданный набор значений для полей тоже хранится в бд? )
Нажимается кнопка искать и.....?
4. я так думаю делается запрос к таблице content_type_нашанода. В качестве условия - полученный ИД подкатегории.
выбираются значения подходящие нашим условиям, если они введены. (типа " выбрать 'ноде ИД' где цена > 'цена ОТ' и цена < 'цена ДО' и дата > 'дата ОТ' и дата < 'дата ДО'")
По выбранным ноде ИД идет запрос к node и/или node_revisions и строится таблицарезультатов.

Если сделать это по варианту 3 , то какие моменты можно улучшить?

Я больше чем уверен что в этом описании много неточностей, упущений, не тот порядок обращений и тд.
Если вы что то можете поправить - поправьте пожалуйста.
Думаю многим новым разработчикам Друпал интересно будет знать как работает Друпал с БД, какие запросы, откуда и зачем.

Изображение пользователя Николай

>> Смотря на какое количество пользователей и продуктов расчитанно. Если относительно
>> (чего правда не знаю) не большое, то можно использовать 2 вариант.
>> Но если это будет крупный сайт с посещением >1000, то только 3 вариант.

Сергей, скажите, пожалуйста, эта фраза относится к shared хостингу или к выделенному? Просто я совсем уж новичок в друпале и хочется знать сколько ценных посетителей он выдержит на выделенном сервере.

Изображение пользователя Elephant

Передомной встала задача создать простой каталог товаров. Начал разбираться как это сделать с помощью друпала и понимаю, что мне проще написать с нуля. Я программист, но мне сложно разобраться в нем. Возможно в этом и есть проблема, что нужно думать как пользователь ПК а не программист :).
Как продвигаются Ваши успехи? Возможно, у Вас есть что-нибудь почитать, что помогло бы мне понять этого капитошку?

Изображение пользователя stepan

Стою сейчас примерно перед такой же задачей. Нужно организовать поиск по параметром (ширина, высота, глубина) + желательно писк по цветовой гамме. Попробую помучить второй вариант.
Если за два года с 2008 появились какие-нибудь решения напишите пожалуйста.