Регистрация
Вход через соцсети
Восстановление пароля

Добавление товару нескольких категорий

Новый топик
Страницы: 1  |  2  |  3
06.09.2013, 15:01
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Если у вас все нужные подразделы находятся в одном разделе, тогда так:
1. В главном макете дизайна:
Код:
$abrowse_b['prefix'] = "";
$abrowse_b['active'] = "<option value='\".\$data[\$i][Subdivision_ID].\"'>%NAME</option>";
$abrowse_b['unactive'] = "<option value='\".\$data[\$i][Subdivision_ID].\"'>%NAME</option>";
$abrowse_b['divider'] = "";
$abrowse_b['suffix'] = "";
$altsubs_selector=s_browse_sub(123, $abrowse_b);
$GLOBALS['altsubs_selector']=$altsubs_selector;


2. В форме добавления объекта (в начале):
Код:
";
if(count($_POST)) $cursubs=$_POST['altsubstmp'];
else $cursubs=explode(',', $f_AltSubs );
foreach(array_values($cursubs) as $key=>$val)
{
if(intval($val)) $altsubs_selector=str_replace("value='$val'","value='$val' selected",$altsubs_selector);
}

$addForm .="


3. В той же форме, но там, где нужно вывести селектор:
Код:
Выберите, удерживая клавишу ctrl, один или несколько разделов, в которых будет отображаться товар:<br />
<select name='altsubstmp[]' multiple='multiple' size='15'>$altsubs_selector</select>


4. В условии добавления:
Код:
if(!intval(count($_POST['altsubstmp'])))
{
$warnText = "Пожалуйста, выберите хотя бы один раздел каталога, где будет отображаться товар.<br /><br />";
$posting = 0;
}


5. В действии после добавления:
Код:
if(count($_POST[altsubstmp]))
{
$sublist=join(',',$_POST[altsubstmp]);
$db->query("update Message$classID set AltSubs=',$sublist,' where Message_ID=$message limit 1");
}


6. В форме изменения объекта:
Код:
Выберите, удерживая клавишу ctrl, один или несколько разделов, в которых будет отображаться товар:<br />
";
if(!empty($_POST)) $cursubs=$_POST['altsubstmp'];
else $cursubs=explode(',', $f_AltSubs );
if(count($cursubs)) foreach(array_values($cursubs) as $key=>$val)
{
if(intval($val)) $altsubs_selector=str_replace("value='$val'","value='$val'

selected='selected'",$altsubs_selector);
}
echo "<select name='altsubstmp[]' multiple='multiple' size='7'>
$altsubs_selector</select>


7. В условии изменения объекта:
Код:
if(!intval(count($_POST['altsubstmp'])))
{
$warnText = "Пожалуйста, выберите хотя бы один раздел каталога, где будет отображаться товар.<br /><br />";
$posting = 0;
}


8. В действии после изменения объекта:
Код:
if(count($_POST[altsubstmp]))
{
$sublist=join(',',$_POST[altsubstmp]);
$db->query("update Message$classID set AltSubs=',$sublist,' where Message_ID=$message limit 1");
}


06.09.2013, 16:10
Ответить | Цитировать
e-aston
Евтишин Сергей

Зарегистрирован:
2012-07-02
Сообщений: 5

1 код вставил в макет дизайна (интернет магазин - он вроде главный) а именно в поле "шаблоны вывода навигации", все остальное вроде правильно вставил, при редактировании или добавлении товара появилось окошко (с надписью сверху: "Выберите, удерживая клавишу ctrl, один или несколько разделов, в которых будет отображаться товар:") под строкой куда я прописывал номера разделов, но окошко множественного выбора пустое в нем нет страниц, видимо я что-то не так сделал...
09.09.2013, 08:07
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Проверьте в конце шаблонах вывода навигации, какое значение получилось в переменной после вызова
$altsubs_selector=s_browse_sub(123, $abrowse_b);
Например так:
$altsubs_selector=s_browse_sub(123, $abrowse_b);
echo "[".htmlspecialchars($altsubs_selector)."]";
- и увидите, есть ли что-то между квадратными скобками вверху сайта или нет.
Если нет, значит Вы неправильно указали номер корневого раздела (Вы не забыли исправить 123 на ваш номер раздела, из которого надо брать подразделы?).

09.09.2013, 17:30
Ответить | Цитировать
e-aston
Евтишин Сергей

Зарегистрирован:
2012-07-02
Сообщений: 5

проверил в скобках появляются подразделы, у меня что-то не получается добавить код "2. В форме добавления объекта (в начале):" я его куда не вставлю что в начало что не в начало у меня при добавлении товара после этого кода просто белый экран, т.е. если добавляю в начало то весь экран пустой.
10.09.2013, 06:08
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Код, который я привел - для 4-го нетката. У Вас тоже 4-ый? Если 5-ый, то синтаксис другой будет.

20.10.2014, 13:47
Ответить | Цитировать
Нерсесов Сергей Николаевич

Зарегистрирован:
2014-06-16
Сообщений: 20

Пожалуйста, можете привести пример для 5-ой версии?

Чтоб чекбоксами отмечать
20.10.2014, 15:12
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Создайте поле select_category тип строка.
Альтернативная форма добавления. Вставьте там где должны отображаться чекбоксы.
Код:
<?
$select_category = explode(":",$f_select_category);
$Subdivisions= $nc_core->db->get_results("SELECT * FROM Subdivision WHERE Parent_Sub_ID=".$sub."", ARRAY_A );
foreach($Subdivisions as $Subdivision){ ?>
<label><input name='f_select_category[]' value='<?=$Subdivision[Subdivision_ID]?>' <? if(array_search('$Subdivision[Subdivision_ID]',$select_category)){ ?> checked<? } ?>> <?=$Subdivision[Subdivision_Name]?></label>
<?
} ?>

Для вывода всех подразделов разделов использовать рекурсивную функцию
Код:
<?
$select_category = explode(":",$f_select_category);
function recursSub($sub){
global $nc_core;
$Subdivisions= $nc_core->db->get_results("SELECT * FROM Subdivision WHERE Parent_Sub_ID=".$sub."", ARRAY_A );
foreach($Subdivisions as $Subdivision){ ?>
<label><input name='f_select_category[]' value='<?=$Subdivision[Subdivision_ID]?>' <? if(array_search('$Subdivision[Subdivision_ID]',$select_category)){ ?> selected<? } ?>> <?=$Subdivision[Subdivision_Name]?></label>
<?
recursSub($Subdivision[Subdivision_ID]);
}
}
recursSub($sub); ?>



Действия после добавления. Генерируйте код и вставьте вверх.
Код:
$nc_core->db->query("UPDATE Message".$classID." SET select_category=':".implode(":",$f_field).":' WHERE Message_ID=".$message."");


Для вывода на сайте. Системные настройки компонента
Код:
<? $ignore_sub = $ignore_cc = 1;
$query_where = "a.select_category LIKE '%:".$sub.":%'"; ?>

Двоеточия используются для более точного определения. Например если у вас есть раздела 1 и раздел 12 то в обоих случаях есть 1 а значит он найдет оба что не хорошо.

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
20.10.2014, 22:27
Ответить | Цитировать
Нерсесов Сергей Николаевич

Зарегистрирован:
2014-06-16
Сообщений: 20

Спасибо огромное! щас получается выводятся подкатегории род. категории...а если такая структура:

Родительская категория
- Первая
-- Подкатегория первая
---Подкатегория подкатегории первой
- Вторая
--Подкатегория вторая
---Подкатегория подкатегории пвторой
и т.д.

Если я публикую товары в Родительской категории, то чекбоксы выводятся только на ее подкатегории (это "Первая" и "Вторая"), а чтоб вывести древо категорий, нужно шаблон вывода?
21.10.2014, 10:35
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Используйте рекурсивную функцию. Я добавил к предыдущему.

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
21.10.2014, 18:42
Ответить | Цитировать
Елена Когтина

Зарегистрирован:
2014-05-12
Сообщений: 9

Александр, спасибо за ответы, на днях подобное тоже захотели реализовать для удобства.

А можете подсказать с такой ситуацией..в примере выше, выводятся все подкатегории находящиеся в одной категории, а если товар находится в 2-х разных категориях..т.е. вывод всех разделов каталога, не зависимо в категории находится товар или в подкатегории

спасибо
198 196 2015-03-23 20:44:17 13096
Страницы: 1  |  2  |  3
Описание проекта