Astra.CMS

РегистрацияЗабыли пароль?

Astra.CMS Free

Упрощенный вариант системы доступен для свободного использования.

скачать
     

Обучение

Сборка сайта

Собираем сайт с нужными компонентами.

Интеграция своего дизайна

Учимся работать с шаблонами.

Компоненты

Документация по использованию основных расширений.

26.11.2012

Версия 2.07.10

Исправлена ошибка визуального редактора в Firefox 17.

подробнее

RSS

Форум » Приемы конструирования и интеграции дизайна

Задача по массиву, сортировка данных на основании имеющихся полей

Автор Текст сообщения

Maksim
Сообщений: 165

Подскажите пожалуйста как, не могу понять, как можно реализовать такую задачу:

Есть каталог продукции, список товаров в котором нужно отсортировать данные, но нужно, чтобы
<a class="filter1" href="?sort=size">размер</a>
параметры для сортировки появлялись в зависимости, есть они в категории товаров или их нет.

Я подумал может можно как-то создать массив на основе используемых полей, но тогда непонятно как это сделать, чтобы получилось:
1. Чтобы в классе получилось: (filter1,2,3,4 и т.п. в зависимости от количества полей)
2. В ссылке: ?sort=идентификатор поля (латинские символы), на основании используемых в массиве полей
$items.x
Возможно может есть вариант попроще?


 
aristoc

admin
Сообщений: 798

Ничего не понятно.
1. что за класс?
2. что за поля?
3. что такое $items.x?
 

Maksim
Сообщений: 165

Мне нужно было понять как выводить, в случае если в каталоге не заполнен определённый параметр, то сортировку по... не выводим, если заполнен хотя бы однин, то параметр сортировки появляется.
Пригодился пример из предыдущего сообщения, просто не знал, что можно указывать напрямую без массива. Хотя он работает от случая к случаю.

{if $items[0].size}<a href="?sort=size">размер</a>{/if}
P.S. Хотя этот вариант работает частично sad Т.е.:
В таком вариант работает
{if $items[0].size}<a href="?sort=size">размер</a>{/if}
Лампа, цвет, размер
...
В таком размер пропадает
{if $items[0].size}<a href="?sort=size">размер</a>{/if}
Лампа, цвет,
...
Может есть еще какой-то вариант?
 
aristoc

admin
Сообщений: 798

Если правильно понял, то в разных категориях нужно сделать разную сортировку.
Добавьте просто доп. поле для категории, и в нем для каждой категории укажите сразу нужные значения, чтобы их потом использовать в виде {$category.поле}
 

Maksim
Сообщений: 165

Спасибо, идея хорошая. Только у меня в каталоге более 90 категорий и подкатегорий в которых товары будут иногда изменяться соответственно и их параметры.
Может можно как-то определить через массив, автоматически. Т.е. используются те или те поля из таких-то, а потом жёстко выводить соответствующие результаты?

 
aristoc

admin
Сообщений: 798

Ну тогда что-то вида
{if isset($items[0].size)} ... {/if}
 

Maksim
Сообщений: 165

К сожалению isset я это не знаю как применять sad

Я думал может как-то можно из цикла вытащить значение, например с помощью capture

Например:
{capture name=size}
{section name=i loop=$items}
{$items[i].size}
{/section}
{/capture}
и уже потом выводить
{if $smarty.capture.size}<a class="filter4" href="?sort=size#ancor">Размер</a>{/if}
Но к сожалению
{if $smarty.capture.size}
if в этом случае почему-то не работает, выводит ссылку вне зависимости есть значения или нет.
{if $smarty.capture.size}
Может нужно как-то по другому формировать?


 
aristoc

admin
Сообщений: 798

Что конкретно хотите сделать? С помощью условия с isset можно проверить наличие доп. поля. Я так понимаю в этом была проблема.
 

Maksim
Сообщений: 165

1. Есть поля по которым пользователь сайта может отсортировать товары (размер, напряжение, рабочий ток и т.п). Есть соответствующая категория в которой: в каких-то товарах полях (размер, напряжение и т.п.) значения не указаны, что и вызывает проблему - например нажатие на "размер" при сортировки продвигает какой-то товар вверх, т.к. он не имеет данных в поле "размер" и получается, что ссылка сортировки "просто исчезает" (если указывать if поле). Но в этой же категории в поле "размер" у других товаров есть значения.

В итоге, я пытаюсь получить результат, что, если хоть в одном поле есть значение на текущей странице, тогда ссылка сортировки выводится, если нет ссылка сортировки не выводится.

 
aristoc

admin
Сообщений: 798

Ну я же и предложил вариант условия с isset, которое не зависит от значения самого поля (пустое или непустое), а проверяет существование самого поля.

Можно попробовать еще обходить массив $items.0.fields - в нем содержатся все доп поля с ключами field, name, value.
 

Maksim
Сообщений: 165

Спасибо большое, к сожалению у меня не получилось использовать $items.0.fields или isset. Вышло с помощью {if $smarty.capture.size} - заработало после того как я привёл код в в одну строку
{capture name=size}{section name=i loop=$items}{$items[i].size}{/section}{/capture}

{if $smarty.capture.size}<a class="filter4" href="?sort=size#ancor">Размер</a>{/if}
 

Вы не можете добавить сообщение. Вам необходимо авторизироваться на сайте под своим логином либо зарегистрироваться.


Демо  Скачать A.CMS  Цены  Контакты  Документация