Marionette.js не используете? Там есть такие штуки, как ItemView - они являются частью View. Не уверен, что это то, что вам нужно, но посмотрите этот инструмент - вдруг окажется полезным.
Алмаз: В самом начале укажите эти инструкции. При загрузке пустой формы они выведут пустые массивы. После того, как вы отправите форму - массивы должны быть чем-то заполнены.
У вас js-обработчика к форме не привязано никакого? Может быть, js перед отправкой форму "чистит"?
Ваше решение однозначно гораздо удобнее и симпатичнее, но в данной ситуации человек скорее всего просто изучает циклы, поэтому ему надо разобраться именно с циклом и условными операторами.
Если бы вам дали ваш код в тот самый момент, когда вы разбирались с основами программирования - все ли вам было бы понятно?
И кстати, по-моему функция называется implode, а не array_implode.
Чем больше работаю с opencart, тем больше понимаю, что у него множество проблем с архитектурой. Как минимум - дублирующиеся ссылки, переобъявление кучи переменных из языковых файлов. Модели там очень бедные и скудные.
Переписывание оформление заказа из-за отсутствия API и наличия кривых моделей вылилось в длительное путешествие по коду.
Когда-то я читал про то, что возможны два варианта - толстый контроллер, тонкая модель, либо наоборот - тонкий контроллер и толстая модель. В данном случае то, что "толстое" - проверяет, валидирует и т.д.
Виталий Либер: в gridview можно атрибуты в любом удобном виде выводить через анонимные функции (см. документацию).
Самый простой вариант - сделать find()->all() и затем во View через foreach() вывести все модели со ссылками и прочими атрибутами, с необходимой версткой.
Gridview больше удобен для админ-панели.
Если задача вывести список записей в блоге на сайте, то я бы сделал через foreach().
Виктор Выскребенцев: когда я писал модуль импорта, то я не трогал опенкарт, а работал напрямую с его базой данных. Структура там довольна простая, главное не забывать про многоязычность для атрибутов и описаний.
Мы как-то купили модуль импорта за $30 (по старому курсу), так в нём было куча косяков, которые автор пытался компенсировать огромным количеством видео-туториалов по модулю. В итоге вернули деньги и написали свой модуль.
Это одна из проблем опенкарта - модули, даже платные, зачастую очень косячные.
Если работать только с базой опенкарта, то код самого опенкарта трогать не надо, при этом все атрибуты и характеристики будут попадать в фильтры.
Именно поэтому надо написать какой-то минимальный api для опенкарта, который будет работать непосредственно с БД.
Я бы начинал синхронизацию со стороны опенкарта - раз у вас на стороне приложения постоянно меняются данные, то в какой бы момент времени опенкарт не обратился к ним, то скорее всего там будут какие-то изменения. Ну и как предложили выше - шлите запрос от опенкарта к приложению, а приложение пусть отдает список товаров, которые обновили свои данные.