Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Как привязать один и тотже объект (статью) к разным разделам

Страницы: 1  |  2
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 "


198 196 2010-05-14 17:53:15 9895
Страницы: 1  |  2
Описание проекта