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

Несколько картинок в каталоге

24.09.2008, 17:44
Дубин
Михаил Дубин

Зарегистрирован:
2008-08-18
Сообщений: 44

Как сделать так что бы можно было для одного пункта каталога добавить неограниченное количество картинок.
25.09.2008, 08:25
ktotoff
АльтерЛан

Зарегистрирован:
2006-12-19
Сообщений: 334

Листклассом из другого раздела. Типа комментариев. ;)


...жизнь прекрасна, когда правильно подобраны антидепрессанты...
27.09.2008, 19:13
Дубин
Михаил Дубин

Зарегистрирован:
2008-08-18
Сообщений: 44

Не совсем понял, можешь описать данное действие поподробнее.
28.09.2008, 15:35
ktotoff
АльтерЛан

Зарегистрирован:
2006-12-19
Сообщений: 334

Общий алгоритм такой (если делать что-то типа этого). Сперва добавляешь в каталог некоторый объект (товар), затем добавляешь для этого товара столько картинок, сколько требуется. Для этого создаёшь раздел «Картинки» с шаблоном «Картинки» с правами на добавление для тех, кто может редактировать каталог. Поля в шаблоне (навскидку):

pictureForDivision — номер раздела «каталог», тип «строка»
pictureForSubclass — номер шаблона «каталог» в разделе «каталог», тип «строка»
pictureForObject — номер объекта в шаблоне «каталог» в разделе «каталог», тип «строка»
pictureImageIcon — маленькая картинка, тип «файл»
pictureImageFull — больщая картинка, тип «файл»

Чтобы было проще и короче, картинки к объектам каталога будем смотреть только в fullLink'ах.
Далее где-то в полном выводе объекта:

1. Считаем картинки для объекта
Код:
".opt($pictureCounter = strlen(listQuery("SELECT Message_ID FROM MessageXXX WHERE pictureForDivision = $sub AND
pictureForSubclass = $cc AND pictureForObject = $f_RowID", "+")), "")."

2. Если есть картинки, показываем их:
Код:
".($pictureCounter ? s_list_class(XX, XX, "&srchPat[0]=$sub&srchPat[1]=$cc&srchPat[2]=$f_RowID&isTitle=1") : NULL)."

3. Чтобы было проще, даём владельцу возможность добавлять картинки прямо из fullLink'а объекта. Для этого рисуем форму:
Код:
<form name='adminForm' id='adminForm' enctype='multipart/form-data' method='post' action='/netcat/add.php'>
<input type='hidden' name='f_pictureBackLink' value='$GLOBALS[client_url]' />
<input type='hidden' name='admin_mode' value='1' />
<input type='hidden' name='catalogue' value='1' />
<input type='hidden' name='cc' value='XX' /> — номер раздела «Картинки»
<input type='hidden' name='sub' value='XX' /> — шаблона «Картинки» в разделе «Картинки»
<input type='hidden' name='posting' value='1' />
<input type='hidden' name='f_Checked' value='1' />
<input type='hidden' name='f_pictureForDivision' value='$sub' />
<input type='hidden' name='f_pictureForSubclass' value='$cc' />
<input type='hidden' name='f_pictureForObject' value='$f_RowID' />
<input type='file' name='pictureImageIcon' />
<input type='file' name='pictureImageFull' />
<button type='submit'>Добавить картинку</button>
</form>

4. Чтобы «добавлятель» возвращался в объект после добавления картинок, в форме предусмотрено скрытое поле pictureBackLink. В «действии после добавления», в шаблоне «Картинки» пишешь что-то типа:
Код:
";
if ($f_pictureBackLink) $goBackLink = $f_pictureBackLink;
else $goBackLink.="?subID=pictureForDivision&scID=$f_pictureForSubclass&objID=$f_pictureForObject";
header("Location: $goBackLink");
die();"

Собственно, всё. Форму добавления, естественно, показываем владельцу объекта или пользователю из группы «редактор каталога», что определяется в полном выводе объекта шаблона «Каталог».
Изменение, включение-выключение и прочую дребедень также для владельца объекта расписываем уже в шаблоне «Картинки», в поле «Объект в списке». При этом везде храним значение pictureBackLink, чтобы добавлятель-неадмин не попадал куда не следует.

Вывод больших картинок... ява-скриптом проще всего. Если добавлятель — внешние пользователи, то валидность заполнения полей (например, размеры заливаемых картинок), тоже лучше проверять аяксом. Хотя, наверное, можно что-то придумать и без него. Может кто ещё подскажет.

UPD. В принципе, можно сделать и немного иначе. Сейчас глянул, в поставке 3.1 есть шаблон «Комментарии», где используется немножечко иной принцип. Там форма добавления также выводится листклассом, а все условия выборки определяются в системных настройках. Можно и этот шаблон под требования допилить. В любом случае, самое сложное — это грамотно скрыть системные внутренности и избежать ухода из объекта, если картинки будет добавлять не админ, а какой-то посторонний зарегистрированный пользователь. Но это уже на совести оплачиваемого разработчика ;)

Всё, что написано выше — рассчитано на ситуацию, когда у объекта в каталоге может быть неопределённое количество картинок. Если картинок может быть ограниченное количество, например 3 или 5, то проще добавить в шаблон каталога несколько полей типа «файл» и не плодить, так сказать, сущности.

...жизнь прекрасна, когда правильно подобраны антидепрессанты...
198 196 2008-09-28 15:35:04 7550
Описание проекта