|
|
23.03.2010, 21:28
|
|
iprus
Зарегистрирован: 2008-10-07
Сообщений: 73
|
Перекопал все, решения не нашел.
Подскажите пожалуйста, как привязать одну и ту же статью (объект) из компонента "Простые статьи" к разным разделам (с подключенным к ним этим же компонентом или может без его подключения)?
Например, я создал несколько разделов (и подразделов в них)?
1. Раздел: Стройматериалы
--- Кирпич
--- ЖБИ
--- Цемент
...
2. Раздел: Ремонтные работы
--- Кладка плитки
--- Кладка паркета
...
3. Скрытый раздел: Все статьи (все объекты компонента "Простые статьи" в одном списке).
Сами по себе разделы "Стройматериалы", "Ремонтные работы" (и их подразделы) непосредственно наполняться статьями не будут, т.е. они будут служить ПОКА просто как разделы-пункты меню, при заходе в которые должен формироваться выборочный список соответствующих им статей из раздела "Все статьи".
Т.е. в разделе "Все статьи" (только в нем будут практически добавляться статьи) в форме добавления должна быть возможность выбирать во множественном select к каким нескольким разделам сайта статья относится.
Как это реализовать?
Другими словами:
1. При добавлении в форму компонента "Простые статьи" нового поля множественного выбора (select) что писать в строке "Формат", чтобы в этом select отображались все разделы сайта?
2. И как вывести в каждом разделе сайта "свои" соответствующие статьи (список из заголовков с анонсами и картинкой), используя только (по возможности) функционал NetCat?
Я понимаю, что можно не мудрить и создать тематический список, создать поле множественного выбора в формате Razdel:select и вывести его в форме добавления. Затем путем запроса к таблице компонента делать соответствующую выборку статей испольуя select * from Message23 where id_razdel=$..., короче типа динамического каталога.
Но мне очень важно реализовать именно через создание полноценных неткатовских разделов, потому что в будущем каждый в отдельности раздел станет самостоятельно развиваться и привязываться по разному к другим компонентам, использоваться неткатовские модули поиска по разделам сайта, управление рекламой и т.д.
Надеюсь меня поняли Заранее спасибо.
|
|
|
24.03.2010, 08:39
|
|
malich
Андрей Малков
Зарегистрирован: 2005-08-09
Сообщений: 522
|
Вариантов тут много, например:
1. вы можете создать новый компонент и прикрепить его ко всем разделам в которых у вас должны выводится статьи.
в этом компоненте создаем одно поле "связь с другим объектом". При добавлении записи в карте сайта мы выбираем нужную статью, и в этом поле будет хранится ее ID. Затем зная ID записи мы в объекте в списке и в полном просмотре sql запросом подтягиваем нужный контент из компонента со статьями.
2. В компоненте со статьями создаем альтернативную форму добавления и изменения.
Создаем в нем новое поле типа строка.
Карта сайта хранится в базе данных в табличке Subdivision, sql запросом формируем список с множественным выбором с названиями нужных разделов и их ID.
В условии добавления и изменения формируем значения для нашего текстового поля из ID выбранных в списке пользователем разделов (95,103,178):
$f_pole=.....
Прикрепляем компонент со статьями ко всем разделам со статьями, в системных настройках пишем:
$ignore_sub=1;
$ignore_cc=1;
Это приведет к тому, что все записи будут выводится вне зависимости от раздела.
Теперь нам нужно добавить условие, что бы в разделе выводились только те записи в которых указан ID нужного раздела.
$query_where = "a.наше_поле_с_id_разделов='$sub'"; - так конечно не заработает, но надеюсь, что мысль понятна.
|
|
|
24.03.2010, 12:13
|
|
Гость
Гость
|
malich, спасибо за подробности! Буду вникать в Ваши примеры и пробовать. Потом здесь отпишусь.
Если кто еще какие варианты добавит, буду рад.
|
|
|
24.03.2010, 12:48
|
|
iprus
Зарегистрирован: 2008-10-07
Сообщений: 73
|
Выше Гость - это я, iprus Не авторизовался.
malich писал(а):1. вы можете создать новый компонент и прикрепить его ко всем разделам в которых у вас должны выводится статьи.
в этом компоненте создаем одно поле "связь с другим объектом". При добавлении записи в карте сайта мы выбираем нужную статью, и в этом поле будет хранится ее ID. Затем зная ID записи мы в объекте в списке и в полном просмотре sql запросом подтягиваем нужный контент из компонента со статьями.
Этот пример неудобен для редактора-контентщика (производительность падает), потому что ему придется сделать несколько шагов, т.е. сначала добавить статью в общем разделе "Все статьи", затем пройтись по соответствующим разделам и подтянуть ее. Много манипуляций.
Удобней все-таки, чтобы в одной форме добавления статьи сразу из списка выбрать соотетствующие разделы сайта (карты).
Вникаю дальше, в пример 2.
|
|
|
24.03.2010, 13:01
|
|
iprus
Зарегистрирован: 2008-10-07
Сообщений: 73
|
malich писал(а):2. В компоненте со статьями создаем альтернативную форму добавления и изменения.
Создаем в нем новое поле типа строка.
Карта сайта хранится в базе данных в табличке Subdivision, sql запросом формируем список с множественным выбором с названиями нужных разделов и их ID.
Вообще возможно только средствами NetCat обойтись, т.е. без создания альтернативной формы и собственного sql-запроса для формирования списка.
То есть, можно ли реализовать через добавление нового поля "Множественный выбор" в стандартной форме и заполнения поля "Формат:" например так: Subdivision:select:3 (но так не работает - ошибка в форме)?
В документации написано про множественный выбор:
"Поле «Формат» в этом случае обязательно для заполнения. Оно должно
содержать как минимум имя таблицы. Так же в поле «Формат» можно задать
вид (select или checkbox) элемента, который будет выводиться по умолчанию в
формах добавления, изменения и поиска."
|
|
|
24.03.2010, 13:08
|
|
malich
Андрей Малков
Зарегистрирован: 2005-08-09
Сообщений: 522
|
Цитата:Вообще возможно только средствами NetCat обойтись, т.е. без создания альтернативной формы и собственного sql-запроса для формирования списка.
Нет нельзя, потому что списки берутся из раздела "Разработка -> списки"
Если вы в этом разделе создадите новый список и забьете в него названия ваших разделов с id то да. но метод будет не очень универсальным.
Цитата:например так: Subdivision:select:3 (но так не работает - ошибка в форме)?
в таком виде Subdivision это название списка
|
|
|
24.03.2010, 13:46
|
|
iprus
Зарегистрирован: 2008-10-07
Сообщений: 73
|
malich писал(а):в таком виде Subdivision это название списка
Понятно, значит придется в ручную по Вашим примерам.
|
|
|
24.03.2010, 21:42
|
|
iprus
Зарегистрирован: 2008-10-07
Сообщений: 73
|
malich писал(а):вы можете создать новый компонент и прикрепить его ко всем разделам в которых у вас должны выводится статьи.
Андрей, я реализовал пример 1, хорошо получилось, спасибо, в принципе удобно.
Но возник другой вопрос:
После удаления какой-либо статьи из общего раздела "Все статьи" связи в разделах с привязанной этой удаленной статьей остались, не удалилиь, т.е. в админке (редактирование) остались пустые строки $f_AdminButtons.
Подскажите пожалуйста, как сделать чтобы и связи соответствующие удалялись?
|
|
|
25.03.2010, 07:38
|
|
malich
Андрей Малков
Зарегистрирован: 2005-08-09
Сообщений: 522
|
в компоненте со статьями в действии после удаления статьи напишите:
Код:$db->query("DELETE FROM `MessageXX` WHERE поле_в_котором_хранится_id_статьи = $message");
MessageXX - XX, id компонента который вы создали
$message - это переменная в которой хранится id статьи
|
|
|
25.03.2010, 10:07
|
|
iprus
Зарегистрирован: 2008-10-07
Сообщений: 73
|
malich писал(а):в компоненте со статьями в действии после удаления статьи напишите
Написал в компоненте статей на вкладке Шаблоны действий в поле Действие после удаления объекта:
$db->query("DELETE FROM `Message92` WHERE Statiya = $message");
где:
Message92 - таблица связей со статьями (или компонент связей с объектами с одним полем Statiya);
Statiya - имя поля с id статьи в этом компоненте.
При удалении статьи связи не удалились и появилась ошибка:
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in D:wwwtest.runetcatmessage.php(343) : eval()'d code on line 1
|
|
|
25.03.2010, 10:23
|
|
malich
Андрей Малков
Зарегистрирован: 2005-08-09
Сообщений: 522
|
Надо нажать ссылку "сгенерировать код действия" что бы вставилось действие по дефолту и туда уже вставить код
Код:";
$db->query("DELETE FROM `Message92` WHERE Statiya = $message");
... тут то что по дефолту...
echo "
|