Вопрос:
Мне нужно отсортировать массив с помощью smarty. Я пытаюсь использовать этот код:
Мой foreach:
{foreach $hooks->addblock as $addblock} <ul> {foreach $addblock|@sortby:»prio» as $value} {$value@key}: {$value} {/foreach} </ul> {/foreach}
var_dump $hooks->addblock:
array(5) { [«filed_1»]=> array(5) { [«id»]=> string(7) «filed_1» [«title»]=> string(6) «filed1» [«field»]=> string(20) «This is test filed 1» [«size»]=> int(740) [«prio»]=> int(7) } [«filed_2»]=> array(5) { [«id»]=> string(7) «filed_2» [«title»]=> string(6) «filed2» [«field»]=> string(20) «This is test filed 2» [«size»]=> int(740) [«prio»]=> int(6) }
Итак, я хочу сортировать массив по значению prio (num) по возрастанию, но это не получается правильно!
Вот результат:
Я бы хотел, чтобы строка “field_2” была первой. Но я не нашел решения.
Это модификатор (modifier.sortby.php): http://www.smarty.net/forums/viewtopic.php?p=23628#23628
У меня также есть повторяющаяся ошибка:
[Сб Ноя 24 20:04:52 2012] [ошибка] [клиент 127.0.0.1] Замечание PHP: Неинициализированное смещение строки: 0 в /var/www/libs/plugins/modifier.sortby.php(33): созданное время выполнения функция в строке 1
Лучший ответ:
Примечание PHP: Неинициализированное смещение строки: 0 в /var/www/libs/plugins/modifier.sortby.php(33): функция, созданная во время выполнения в строке 1
Это дает представление о том, как работает модификатор sortby.
В документации, на которую вы ссылаетесь, говорится:
“-” позволяет сортировать в обратном порядке, а # позволяет сортировать численно, а не как строку (вы можете иметь “- # age”, а также сортировать численно в обратном порядке )
Ваше поле prio является целым числом, и хотя в PHP вы можете делать много операций прозрачно по целым числам и строкам, уведомление указывает, что sortby реализовал сортировку строк, обратившись к каждому символу в отдельности. Это не может работать с целым числом.
Итак, вы должны использовать модификатор #:
{foreach $addblock|@sortby:»#prio» as $value} ^ Ответ №1
Не делай этого. Сортировка – это не задача, которую должен сделать движок шаблона. Это явно бизнес-логика и нужно войти в контроллер.