Как получить массив из smarty внутри JS Есть решение
Получаю список всех товаров с разбивкой по категориям вот так:
{foreach from=$categories item=category name=menu} {$category.name} {foreach from=$category.products item=product name=price} <a href="/{$product.url}">{$product.name} - {$product.price}</a> {/foreach} {/foreach}
Пришло лето, жара -> озадачился))): как этот же массив товаров передать в переменную js?
Пробую вот так
var cats = '{$categories}';
- отдает Array, как дальше его разложить средствами js?
11 ответов
Как-то так.
P.S. Обычно, наоборот, прошу уйти с форума для разработчиков, но тут вопрос, похоже, для него :)
https://developers.webasyst.ru/forum/
спасибо, массив теперь поддается расшифровке!
по поводу p.s. так и не понял - радоваться теперь или огорчаться?
))))
1000 товаров - страница кешируется на 6Мб!!!. наверное, придется отказаться от формирования переменной..
хотя браузер открывает страницу очень быстро...
массив этот нужен был для выбора на стороне клиента - жмет на кнопку категории - ему отдается список товаров этой категории. ajax щупать? есть рабочее решение, аджаксом отправляю АЙДИ категории, в ответ получаю список товаров, но запрос идет на самодельный файл с прямым подключением в базу, хотелось бы уйти от такого варианта и использовать системное подключение к базе.
или все-таки создание-хранение огромной переменной в браузере не так страшен черт как его малюют?
Прямое подключение к базе? оО, мсье знает толк в извращениях =)
Для реализации задуманного достаточно использовать системный класс shopProductsCollection. Что-то типа:
Рекомендую класс к изучению, т.к. там реализовано много чего полезного ;)
Мне кажется, тогда проблема не в создании переменной из 1000 товаров, а в самом подходе к решению задачи :)
Как минимум, можно передавать в JS только нужные данные (Id и название??). Или вам вообще всё и сразу надо? 0_о
из товаров нужно название, цена, наличие (есть/нет) и по возможности ID категории, которой принадлежит товар.
было бы интересно увидеть, как можно сразу отсекать лишнее??? там действительно массив огромный на выходе, хотя вот в браузере все отрабатывает очень быстро... надо на смартфонах попробовать, пока еще массив в исходном огромном состоянии, пока мы его еще не усекли СОВМЕСТНЫМИ ДРУЖНЫМИ усилиями!!)))
ну зависит от того как и где этот массив получен.
Для коллекций Дмитрий показал хороший вариант. В метод
можно первым параметром передать список полей.
В крайнем случае пройтись по циклу и сформировать новый массив.
я про массив в js -
И я о нём. Несмотря на то, что у вас то с категориями, то с продуктами проблема.
Откуда $categories? Прежде чем тупо переменную кодировать нужно либо изменить логику её формирования, либо создать новую нужную переменную.
Хотя я начинаю догадываться, что вы слабо представляете как работает Смарти и почему вы получили Array в самом начале :)
Переменная формируется в плагине pricepage, вывожу все эти эксперименты на соответствующей странице, про контроллеры немного читал, давайте еще нападайте на новичка))) Сразимся потом на каком-нибудь форуме для верстальщиков)))) Я вам покажу где nth-child зимует!!)))
Мне как бы достаточно почитать пару дней и логика смарти предстала во всей красе, ну что вы в самом деле, уж если я компоненты от не к ночи помянутого битрикса щелкаю на 1-2-3... Целиком осваивать смарти буду по мере потребностей, преждевременная оптимизация не мой конек)))
Плагин pricepage ваш?
Как-то же вы в шаблон переменную передали? В контроллере/экшене
Вот с php-переменной и надо работать.