|
|
02.11.2009, 12:59
|
|
omican
Зарегистрирован: 2009-11-01
Сообщений: 4
|
1. Как создать подраздел, который "содержал" бы выборку объектов родительского раздела? Например, подраздел "товары из Китая" раздела "товары". Вроде бы это описано в руководстве разработчика, но мне так и не удалось добиться желаемого.
Иначе говоря:
Посетитель, пройдя по ссылке "товары из Китая", видит красивый URL типа /shop/china/ (+ соотв. навигацию), и товары со страницы /shop/?country=China.
2. Можно ли создавать подразделы динамически? Например, я хочу вставить в действия после регистрации специального пользователя некую функцию, которая создавала бы подраздел магазина под него. Какова должна быть эта функция?
|
|
|
03.11.2009, 02:43
|
|
DiGGy
DiGGy
Зарегистрирован: 2005-04-04
Сообщений: 1546
|
omican писал(а):1. Как создать подраздел, который "содержал" бы выборку объектов родительского раздела? Например, подраздел "товары из Китая" раздела "товары". Вроде бы это описано в руководстве разработчика, но мне так и не удалось добиться желаемого.
Иначе говоря:
Посетитель, пройдя по ссылке "товары из Китая", видит красивый URL типа /shop/china/ (+ соотв. навигацию), и товары со страницы /shop/?country=China.
В используемом компоненте в "Настройки отображения компонента раздела" пишите:
Код:$settings_array = array(
"Country" => array("type" => "string",
"caption" => "Страна",
"size" => "100"
)
);
Далее в каждом нужном вам разделе в визуальных настройках заполняете появившееся поле "Страна".
Далее в компоненте в поле "Системные настройки" формируете ручками условие sql-запроса:
Код:if ($cc_settings[Country])
{
$ignore_sub = true;
$ignore_cc = true;
$query_where .= " and a.country='{$cc_settings[Country]}'";
}
то что красным - туда подставьте название своего поля из компонента.
Ну вроде всё - вот вам щастье!
зы. ну если время есть, то штудируйте модреврайт )))
omican писал(а):2. Можно ли создавать подразделы динамически? Например, я хочу вставить в действия после регистрации специального пользователя некую функцию, которая создавала бы подраздел магазина под него. Какова должна быть эта функция?
Можно - ловите событие добавления юзера и туда свой код пишите. Смысла создавать отдельный подраздел для юзера нет (не могу себе представить ситуацию, когда это необходимо). Это делается иначе - путем фильтра записей по конкретному юзеру.
Temet nosce...
|
|
|
03.11.2009, 22:50
|
|
omican
Зарегистрирован: 2009-11-01
Сообщений: 4
|
Спасибо за подробный и внятный ответ! Таковые встречаютя не так часто :-)
Цитата: Смысла создавать отдельный подраздел для юзера нет (не могу себе представить ситуацию, когда это необходимо).
Хотелось сделать такое для удобства дальнейшего админинстрирования, но можно дейсвтительно обойтись без этого.
З.ы. Мне наконец-то попал в руки код движка, теперь разберусь во всем!
|
|
|
06.11.2009, 09:53
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
В руководстве разработчика сказано примерно так: найти нужный элемент в массиве srchPat и искать по нему. Есть у меня раздел /cat/boilers/, создаю в нем новый компонент, ставлю ему ключевое слово gas, внешнюю ссылку - /cat/boilers/?srchPat[12]=1, используемый компонент - нет, макет дизайна - наследую от /cat/boilers/ - толку ноль, выдает пустую страницу, хотя http://домен.ru/cat/boilers/?srchPat[12]=1 вытаскивает всю нужную выборку. Что не так?
|
|
|
06.11.2009, 10:07
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
Ага, причина найдена
Руководство пользователя писал(а):Внешняя ссылка
Это свойство предназначено исключительно для построения навигации и должно содержать ссылку на какой-либо раздел или сайт. Именно эта ссылка будет подставлена в навигации при выводе раздела, а не его настоящий путь, построенный по ключевым словам. Заметьте, что в
раздел все равно можно попасть, набрав настоящий адрес в браузере.
Жаль только, что такие "мелочи" не указывают в руководстве разработчика.
|
|
|
06.11.2009, 12:01
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
Сразу же вопрос вслед: можно ли для каждого подраздела, у которого внешняя ссылка стоит на родительский раздел с установленным фильтром, вывести в начале индивидуальный текст? То бишь: раздел "Товары", наверху страницы некий текст, дальше - все товары. Подраздел "Котлы", наверху страницы текст про котлы, дальше - выборка из товаров where type=котел. Подраздел "Горелки", текст про горелки, выборка по всем горелкам. Возможно ли такое?
|
|
|
06.11.2009, 12:50
|
|
ooo
ПАЛНАРИС
Зарегистрирован: 2009-06-18
Сообщений: 57
|
Можно используя функции opt или opt_case:
Условие примерно такое:
если на странице выводятся товары типа "чугунки" и страна типа "Китай", то вывести: "Дешево! Супер кастрюли из Японии!".
|
|
|
06.11.2009, 12:54
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
Тогда эту фразу про супер-кастрюли из Японии придется вбивать в сам макет. А хочется, чтобы этот текст возможно было править редактору раздела, не имеющему админских прав.
|
|
|
06.11.2009, 13:03
|
|
ooo
ПАЛНАРИС
Зарегистрирован: 2009-06-18
Сообщений: 57
|
Была подобная задача.
Значит, представим компонент статьи.
Добавляем в него поле "Страна", формат - список (с условием, что он есть и обзывается, например, alist_country
Создаем компонент "Выборка статей по странам", там пишем коды:
Сначала то, что будет выводить заголовок:
Код:".opt($f_alist_country,"<h2>$f_alist_country</h2>")."
<div class='conts'><p style='float: left; margin:0;'>
<a href='javascript:history.go(-1)'>« назад</a></p>
<p class='fright' style='margin:0;'>
<a href='/article/'>вернуться к рубрикатору статей »</a></p></div>
<div class='articles'>
ниже:
Код:<!-- первый -->
".opt_case($cc==1002,"
".listQuery("select Title, Keyword, DATE_FORMAT(DatePublication, '%Y/%m/%d')as
DatePublication, Message_ID, Checked, Announcement, alist_country from Message54 where alist_country='4'
order by Created DESC", "<div class='cat4'><h3>$data[Title]</h3>
n<p>$data[Announcement]n</p>
<p><a href='/article/country/$data[DatePublication]/$data[Keyword].html'
class='ssulk'>подробно…</a></p></div>n
")."
</div>
","
")."
<!-- второй -->
....
<!-- третий -->
....
и т.п.
Добавляем в раздел компонент "Выборка статей по странам", обзываем его, например, "Россия".
Неудобство - так по каждой необходимой стране...
Заходим в редактирование и добавить элемент, выбираем в списке "Россия". Внимание. Цифра 4 - это ID "Россия" в списке. По нему будет проводиться выборка.
И так далее... такое вот решеньице...
При добавлении статьи выбираем страну из списка и все. Она будет как в своем положенном разделе, так и в выборке по адресу страницы компонента с этой страной.
|
|
|
06.11.2009, 14:16
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
ListQuery не подходит - он требует шаблона для вывода объектов, а мне нужно, чтобы объекты выводились по тому шаблону, который прописан в их компоненте.
Попробовал s_list_class - не работает. У меня есть компонент "Насосы" №78, раздел "Список продукции" №83, у него подраздел "Насосы" №87, где хранятся все насосы, и у них подраздел "Циркуляционные" №117.
Мне надо, чтобы на странице "Циркуляционные" выводились все насосы с PumpType=1. Пишу в макете дизайна для этой страницы
s_list_class(83,78,'PumpType=1')
s_list_class(87,78,'PumpType=1')
s_list_class(117,78,'PumpType=1')
Все три варианта возвращают:
Warning: Ошибочный параметр $cc в функции nc_objects_list(XX, 78, "...") in /var/www/html/heatshop.ru/docs/netcat/require/s_loadenv.inc.php on line 255
Как правильно вызвать функцию? Можно, конечно, вручную средствами MySQL, но тогда опять же придется с извращениями выцеплять макет дизайна, а этого не хочется.
|
|
|
02.11.2009, 22:06
|
|
ktotoff
АльтерЛан
Зарегистрирован: 2006-12-19
Сообщений: 339
|
Погуглите на тему ModRewrite. Больше очевидных и вменяемых способов нет!
...жизнь прекрасна, когда правильно подобраны антидепрессанты...
|