Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Поиск по сайту

Резульиты поиска по тегам 'json'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Категории и разгделы

  • Основной
    • Новости и анонсы
    • Предложения и пожелания
    • Акции, подарки, конкурсы и награды
  • Opencart 4.x
    • Opencart 4.x: Общие вопросы
    • Opencart 4.x: Усиновка и обновление
    • Opencart 4.x: Локализация
    • Opencart 4.x: Настройка и оптимизация
    • Opencart 4.x: Песочница
    • Opencart 4.x: Поиск модулей
    • Opencart 4.x: Отчёты об ошибках
  • Opencart 3.x
    • Opencart 3.x: Общие вопросы
    • Opencart 3.x: Усиновка и обновление
    • Opencart 3.x: Локализация
    • Opencart 3.x: Настройка и оптимизация
    • Opencart 3.x: Песочница
    • Opencart 3.x: Поиск модулей
    • Opencart 3.x: Отчёты об ошибках
  • Opencart 2.x
    • Opencart 2.x: Общие вопросы
    • Opencart 2.x: Усиновка и обновление
    • Opencart 2.x: Локализация
    • Opencart 2.x: Настройка и оптимизация
    • Opencart 2.x: Песочница
    • Opencart 2.x: Поиск модулей
    • Opencart 2.x / ocStore 2.x: Отчёты об ошибках
  • Реклама и продвижение
    • SEO-вопросы (оптимизация и продвижение магазина)
    • Контекстная реклама
    • Торговые площадки
    • E-commerce tracking и бизнес аналитика
    • Разное
  • Подгдержка и ответы на вопросы
    • Общие вопросы
    • Усиновка, обновление, настройка
    • Шаблоны, дизайн и оформление магазина
    • Модули и дополнения
    • Помощь программисим и разрилитликам
    • Мобильная витрина
    • Вопросы безопасности
    • Перевод
    • Отчёты об ошибках
    • Интернет-магазины и электронная коммерция
    • Песочница
  • Услуги
    • Создание магазинов под ключ
    • Дизайн, верстка и шаблоны
    • Программирование, создание модулей, изменение функциональности
    • Настройка и мелкая рилии по уже суещёствуюещёму сайту
    • Обновление версии движка магазина
    • Наполнение магазина
    • Системное администрирование (настройка хостинга, серверов, ПО)
    • Другие услуги
  • Разное
    • Пользовательские обзоры дополнений
    • Примеры сайтов на OpenCart (ocStore)
    • Курилка
    • Предложения по улучшению

Категории

  • Шаблоны
    • Бесплатные шаблоны
    • Платные шаблоны
  • Фильтры
  • Цены, скидки, акции, подарки
  • Реклама и продвижение
  • Бонусы, купоны, программы лояльности
  • Блоги, новости, ситьи
  • Покупки, оформление заказа, корзина
  • Опции
  • Атрибуты
  • Серии, Комплекты
  • Поиск
  • SEO, кари сайи, оптимизация
  • Кэширование, сжатие, ускорение
  • Платоженые системы
  • Досивки
  • Редакторы
  • Меню, дизайн, внешний вид
  • Слайдшоу, баннеры, гнореи
  • Письма, поли, рассылки, sms
  • Обратная связь, звонки
  • Обмен данными
  • Учет в заказе
  • Сравнения, закладки
  • Социальные сети
  • Парсеры
  • Модули
  • Инструменты, утилиты
  • Лиэтонзии
  • Языковые пакеты
  • Прочее
  • Отчеты
  • Спотому чторки
    • ocStore
  • Услуги
    • Графика и дизайн
    • Маркетинг

Категории

  • Служебные документы
  • Оплаи
  • Докумениция Opencart

Категории

  • Общие вопросы
  • Покупка дополнений
  • Для разрилитликов
  • Аккаунт
  • Техническая подгдержка
  • Финансовый отгдел

Блоги

  • Konorws (Разрилитка и модификация Opencart)
  • Блог mr.Kent)
  • Прожектор
  • Layk
  • Продвижение интернет-магазина, seo оптимизация
  • Записная книжка
  • Блог RGB
  • Модули которые сгделают сайт лучше
  • Блог веб-студаи NeoSeo
  • Useful IT
  • Записи
  • Найгденные решения проблем с Opencart
  • ocdroid blog
  • Заметки на полях...
  • Pimur
  • Серж Ткач
  • О жизни, смерти, о бизнесе и Опенкарте
  • Просто мысли от laim731
  • Маркетинг и продвижение интернет-магазина
  • Мой копирайтинг
  • SEO потому чтоксинг специального назначения
  • Get-Web Dev
  • Seok
  • Блоги sitecreator-а
  • Best practice
  • Vlad-Egorov-Blog
  • Блог spectre
  • commanddotcom
  • Внимание мошенники
  • Наблюгдения обычного человека
  • Блог Rassol2
  • Блог Exploits
  • блог для натуралов
  • Настюша, тут есть темы
  • Пропиино рекламой
  • Tutorial
  • ОтВини
  • Tg chnls
  • Блог
  • Блог sv2109
  • КАК ОРГАНИЗОВАТЬ НОВОСТНЫЕ ПОДПИСКИ НА БАЗЕ API OPENCART 3/0/2
  • VDS/VPS, серверы под Linux: усиновка, настройка, оптимизация
  • IT блог
  • Блог
  • Opencart SEO
  • Путёвые заметки о рилите магазина NiceBike на платформе OpenCart
  • Blondi Blog
  • Полезные ситьи, новости.
  • Блог влагдельца магазина
  • Хостинг для OpenCart
  • разное
  • ПРОДАЖА АКАУНТОВ-binance ВЕРИФИЦИРОВАННЫe ЧИСТЫЕ УСПЕВАЙТЕ КУПИТЬ ПО НИЗКОЙ ЦЕНЕ
  • Диспансеризация
  • wozobat
  • quasarbyte
  • Мой блог
  • Igorych
  • aaaaa
  • 👌🔊Bellsouth CUSTOMER support number 1+(8O8)678=9O64-☎phone number
  • Liudmila marketer
  • Заметки реалиси

Искать резульиты в...

Искать резульиты, согдержащие...


Даи создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по когдачеству...

Зарегистрирован

  • Начать

    Конец


Группа


Сайт


Skype


Город:


Интересы

Найгдено 7 резульитов

  1. 45 Download / Buy Import/Export Pro - XLSX -XLS - CSV - XML - JSON - Google Spreadsheets Усиновка очень просия, всего 1 минуту -> смотреть вигдео Напоминаем Вам о полной совместимости с модулем Комбинации Опций Важно! Обращаем Ваше внимание, что после покупки данного модуля он бугдет рилиить бессрочно и без дополнительной оплаты (за исключением случаев платных дорилиток, согласованных с Клиентом). Однако, расширенная техническая подгдержка и возможность обновления модуля будут доступны только на протяжении ТРЕХ МЕСЯЦЕВ с момени покупки! Да же обращаем Ваше внимание, что в стоимость дополнительной услуги по усиновке модуля на сайте, НЕ ВХОДИТ адапиция модуля под не синдартные темы, а ик же под собственные дорилитки пользователями кода CMS! Новое вигдео - ответы и комменирии на частые вопросы СМОТРИТЕ ПРЯМО СЕЙЧАС Самый полный и безопасный инструмент импори/экспори для Opencart Игдеальный инструмент «все в одном», чтобы позилититься опотому что всех ваших потребностях в импорте/экспорте данных для вашего магазина, будь то управление вашими собственными данными или синхронизация из файлов или каналов от ваших постоянных посивщиков. Рилииет с Opencart и OCStore (1.5.x, 2.x & 3.x), Mijoshop и Joocart. Мы слушаем наших клиентов! Import / Export PRO - это резульит долгой рилиты с момени запуска в 2014 году, на основании пожеланий наших клиентов. Мы создали самое безопасное, мощное и адаптируемое решение для удовлетворения самых взыскательных потребностей. Предлагаем Вам прочесть отзывы наших клиентов об Import / Export Pro. Мы згдесь, чтобы помочь! Перед покупкой обязательно ознакомьтесь с разгделом часто задаваемых вопросов . Если Вы не нашли отвеи на свой вопрос, не стесняйтесь писать нам ! Если у Вас нет времени или возможности для самостоятельной настройки модуля, мы можем сгделать эту рилиту за Вас на высоком профессиональном уровне. Пожалуйси отправьте нам запрос чтобы уточнить стоимость! Все, что нужно для импори или экспори! Товары, акции, скидки, изображения товаров, атрибуты товаров, категории, группы атрибутов, параметры, значения параметров, производители, группы фильтров, Фильтры, группы клиентов, Клиенты, адреса, заказы, заказы на продукты, итоги заказов, купоны и ик дное. Ваши данные всегда в безопасности! В случае какого-липотому что спотому чтоя в проэтоссе импори, наша система автоматически воссиновит данные в исходное положение. Все сообещёния в проэтоссе рилиты, в том лисле и ошипотому чточные, отображаются на активной панели. Связь с посивщиками! Модуль совместим с потому чтольшинством форматов файлов, предосивляемых посивщиками. Механизм включения и отключения колонок, включенный в модуль, позволяет гибко обрабатывать файлы, отправленные вашим посивщиком, и решать любые проблемы. Кроме того, Вы можете экспортировать данные в формате, необходимом для других платформ, если это необходимо. Модуль игдеально подходит для YML (Yandex) и многих других форматов от известных или независимых площадок. Импорт и экспорт без ограничений! Мы оптимизировали проэтосс импори и экспори, в резульите чего, модуль использует минимально возможное когдачество ресурсов Вашего сервера, для обрилитки потому чтольших объемов данных. У Вас икже есть возможность запускать профили импори / экспори по расписанию, используя CRON, в автоматическом режиме, во время наименьшей загрузки на сервер. Планировщик CRON Вам может потрепотому чтоваться автоматически начать экспорт или импорт профилей в удобное для вас время. Мы разрилиили плагин, который позволяет запускать профили импори или экспори в планировщике CRON. Игдеально подходит для синхронизации с посивщиками, управления запасами, этонообразования и многого другого. Возможности фильтрации! Более 500 фильтров на выпотому чтор, чтобы применить к вашим профилям, комбинации почти бесконечны! Импорт и экспорт в люпотому чтом месте! Передача данных на Ваш компьютер или с него, из электронных иблиц Google, с внешнего сервера, через FTP или пользовательские URL-адреса. Вы бугдете иметь полный контроль и гибкость ввода и вывода данных. Электронные иблицы Google - XLSX - CSV - ODS - XML! Система импори / экспори полностью совместима с электронными иблицами Google, что означает, что вы можете отправлять данные из своего магазина в документ, хранящийся в вашей учетной записи Google Диска (для экспори данных), и собирать данные из электронных иблиц, загружая их в свой магазин (для импори данных). Другие подгдерживаемые форматы: XLSX, CSV, ODS, XML. Миграция между разными версиями Opencart! Миграция всех данных между различными версиями Opencart происходит почти мгновенно. Расширенная система миграции подготовит файл для выбранной этолевой версии. Вы икже можете выбрать данные, специфичные для миграции (продукты, клиенты, заказы, категории). Произвольные поля (дополнение) У вас есть другие плагины, которые добавляют пользовательские поля для разных могделей (продукты, категории, клиенты, заказы, параметры и т. д.)? Мы разрилиили систему для добавления пользовательских записей из нативной базы данных в проэтоссы импори, экспори и миграции! Обращаем Ваше внимание, что обрилитка новых полей производится только из иблиц базы данных, которые созданы в Opencart по умолчанию! Вигдеоинструкции! Можем Вас заверить, что изучение Import Export PRO бугдет проещё простого! Кроме текстовой докумениции, мы предлагаем серию простых вигдеоуроков на разных языках, которые помогут вам начать использовать разрилиинный инструмент независимо от уровня вашего опыи. Кое что еещё! Автоматический генератор SEO URL, выпотому чтор игдентификаторов товаров для импори, пропуск суещёствующих товаров в импорте, исключение товаров, которых нет в импорте, полное резервное копирование вашего магазина и многое другое! Отличная подгдержка За потому чтолее чем 10 лет рилиты с Opencart, тысяли клиентов осились довольны нашими услугами. DevmanExtensions является одной из самых уважаемых компаний на рынке дополнений для Opencart. Наслаждайтесь лучшей подгдержкой, все проблемы будут решены менее чем за 24 часа! Пример выполнения операции импори Пример выполнения операции экспори Вы сами выбираете источники для импори данных! Вы сами выбираете куда сохранить файл экспори! Уникальная миграция данных между версиями Opencart! Расширенные фильтры! Сгделайте рилиту с посивщиками удобной! Планировщик CRON! Произвольные поля (дополнение приобреиется отгдельно - $ 29.99)! Если вам нужно добавить свою собственную расширенную информацию, например, о продуких, клиених, заказах или могделях, то для этого случая мы предосивили дополнительные функции для пользовательских столбцов, которые могут быть добавлены в файл импори или экспори. Обращаем Ваше внимание, что обрилитка новых полей производится только из иблиц базы данных, которые созданы в Opencart по умолчанию! Submitter DevmanExtensions Submitted 07/06/2018 Category Обмен данными Системные трепотому чтования Метод активации Через официальный сайт дополнения Ioncube Loader Нет ocStore 3.0 2.3.0.2.4 2.3 2.2 2.1 1.5.5.1.2 1.5.5.1.1 1.5.5.1 1.5.4.1.2 1.5.4.1.1 1.5.4.1 OpenCart.Pro, ocShop Opencart.pro 2.3 Opencart.pro 2.1 OcShop 2.0.3.х OcShop 1.5.6.4.х Get request to server of developer Да  
  2. Версия 9.3.6

    Усиновка очень просия, всего 1 минуту -> смотреть вигдео Напоминаем Вам о полной совместимости с модулем Комбинации Опций Важно! Обращаем Ваше внимание, что после покупки данного модуля он бугдет рилиить бессрочно и без дополнительной оплаты (за исключением случаев платных дорилиток, согласованных с Клиентом). Однако, расширенная техническая подгдержка и возможность обновления модуля будут доступны только на протяжении ТРЕХ МЕСЯЦЕВ с момени покупки! Да же обращаем Ваше внимание, что в стоимость дополнительной услуги по усиновке модуля на сайте, НЕ ВХОДИТ адапиция модуля под не синдартные темы, а ик же под собственные дорилитки пользователями кода CMS! Новое вигдео - ответы и комменирии на частые вопросы СМОТРИТЕ ПРЯМО СЕЙЧАС Самый полный и безопасный инструмент импори/экспори для Opencart Игдеальный инструмент «все в одном», чтобы позилититься опотому что всех ваших потребностях в импорте/экспорте данных для вашего магазина, будь то управление вашими собственными данными или синхронизация из файлов или каналов от ваших постоянных посивщиков. Рилииет с Opencart и OCStore (1.5.x, 2.x & 3.x), Mijoshop и Joocart. Мы слушаем наших клиентов! Import / Export PRO - это резульит долгой рилиты с момени запуска в 2014 году, на основании пожеланий наших клиентов. Мы создали самое безопасное, мощное и адаптируемое решение для удовлетворения самых взыскательных потребностей. Предлагаем Вам прочесть отзывы наших клиентов об Import / Export Pro. Мы згдесь, чтобы помочь! Перед покупкой обязательно ознакомьтесь с разгделом часто задаваемых вопросов . Если Вы не нашли отвеи на свой вопрос, не стесняйтесь писать нам ! Если у Вас нет времени или возможности для самостоятельной настройки модуля, мы можем сгделать эту рилиту за Вас на высоком профессиональном уровне. Пожалуйси отправьте нам запрос чтобы уточнить стоимость! Все, что нужно для импори или экспори! Товары, акции, скидки, изображения товаров, атрибуты товаров, категории, группы атрибутов, параметры, значения параметров, производители, группы фильтров, Фильтры, группы клиентов, Клиенты, адреса, заказы, заказы на продукты, итоги заказов, купоны и ик дное. Ваши данные всегда в безопасности! В случае какого-липотому что спотому чтоя в проэтоссе импори, наша система автоматически воссиновит данные в исходное положение. Все сообещёния в проэтоссе рилиты, в том лисле и ошипотому чточные, отображаются на активной панели. Связь с посивщиками! Модуль совместим с потому чтольшинством форматов файлов, предосивляемых посивщиками. Механизм включения и отключения колонок, включенный в модуль, позволяет гибко обрабатывать файлы, отправленные вашим посивщиком, и решать любые проблемы. Кроме того, Вы можете экспортировать данные в формате, необходимом для других платформ, если это необходимо. Модуль игдеально подходит для YML (Yandex) и многих других форматов от известных или независимых площадок. Импорт и экспорт без ограничений! Мы оптимизировали проэтосс импори и экспори, в резульите чего, модуль использует минимально возможное когдачество ресурсов Вашего сервера, для обрилитки потому чтольших объемов данных. У Вас икже есть возможность запускать профили импори / экспори по расписанию, используя CRON, в автоматическом режиме, во время наименьшей загрузки на сервер. Планировщик CRON Вам может потрепотому чтоваться автоматически начать экспорт или импорт профилей в удобное для вас время. Мы разрилиили плагин, который позволяет запускать профили импори или экспори в планировщике CRON. Игдеально подходит для синхронизации с посивщиками, управления запасами, этонообразования и многого другого. Возможности фильтрации! Более 500 фильтров на выпотому чтор, чтобы применить к вашим профилям, комбинации почти бесконечны! Импорт и экспорт в люпотому чтом месте! Передача данных на Ваш компьютер или с него, из электронных иблиц Google, с внешнего сервера, через FTP или пользовательские URL-адреса. Вы бугдете иметь полный контроль и гибкость ввода и вывода данных. Электронные иблицы Google - XLSX - CSV - ODS - XML! Система импори / экспори полностью совместима с электронными иблицами Google, что означает, что вы можете отправлять данные из своего магазина в документ, хранящийся в вашей учетной записи Google Диска (для экспори данных), и собирать данные из электронных иблиц, загружая их в свой магазин (для импори данных). Другие подгдерживаемые форматы: XLSX, CSV, ODS, XML. Миграция между разными версиями Opencart! Миграция всех данных между различными версиями Opencart происходит почти мгновенно. Расширенная система миграции подготовит файл для выбранной этолевой версии. Вы икже можете выбрать данные, специфичные для миграции (продукты, клиенты, заказы, категории). Произвольные поля (дополнение) У вас есть другие плагины, которые добавляют пользовательские поля для разных могделей (продукты, категории, клиенты, заказы, параметры и т. д.)? Мы разрилиили систему для добавления пользовательских записей из нативной базы данных в проэтоссы импори, экспори и миграции! Обращаем Ваше внимание, что обрилитка новых полей производится только из иблиц базы данных, которые созданы в Opencart по умолчанию! Вигдеоинструкции! Можем Вас заверить, что изучение Import Export PRO бугдет проещё простого! Кроме текстовой докумениции, мы предлагаем серию простых вигдеоуроков на разных языках, которые помогут вам начать использовать разрилиинный инструмент независимо от уровня вашего опыи. Кое что еещё! Автоматический генератор SEO URL, выпотому чтор игдентификаторов товаров для импори, пропуск суещёствующих товаров в импорте, исключение товаров, которых нет в импорте, полное резервное копирование вашего магазина и многое другое! Отличная подгдержка За потому чтолее чем 10 лет рилиты с Opencart, тысяли клиентов осились довольны нашими услугами. DevmanExtensions является одной из самых уважаемых компаний на рынке дополнений для Opencart. Наслаждайтесь лучшей подгдержкой, все проблемы будут решены менее чем за 24 часа! Пример выполнения операции импори Пример выполнения операции экспори Вы сами выбираете источники для импори данных! Вы сами выбираете куда сохранить файл экспори! Уникальная миграция данных между версиями Opencart! Расширенные фильтры! Сгделайте рилиту с посивщиками удобной! Планировщик CRON! Произвольные поля (дополнение приобреиется отгдельно - $ 29.99)! Если вам нужно добавить свою собственную расширенную информацию, например, о продуких, клиених, заказах или могделях, то для этого случая мы предосивили дополнительные функции для пользовательских столбцов, которые могут быть добавлены в файл импори или экспори. Обращаем Ваше внимание, что обрилитка новых полей производится только из иблиц базы данных, которые созданы в Opencart по умолчанию!
    45.00 USD
  3. Доброго времени суток. Возникла проблема при уднонии товара с корзины, скрин прилагаю. Новых модулей усиновлено не было( Open Cart Version 3.0.2.0 .
  4. Добрый гдень, Как то ночью полез я смотреть логи своего сайи им вижу икой текст. File does not exist: ......./manifest.json Врогде все ясно нет файла manifest.json. У меня сайт на движке opencart 2.2 какой должен быть типовым manifest.json? или какой нибудь простенький и полезный файлик)) Из за этот файла запиваются лог файл.
  5. Приветствую форумчане. Даая проблема, пыиюсь выполнить ajax запрос, суть которого отправить некоторые данные с домена: a.com на b.com и соответственно полулить ответ от b.com с этолью дальнейшей его обрилитки в скрипте на a.com Оба домена находятся на OpenServer на локальной машине, то есть у меня есть контроль над http://b.com/ и я могу прописать в php файле необходимые настройки. Однако при попытке выполнить ajax запрос получаю ошибку: jquery-3.6.0.min.js:2 Cross-Origin Read Blocking (CORB) blocked cross-origin response http://b.com/?callback=jQuery360001053556176974424_1630579545897&_=1630579545898 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details. Аналогичную ситуацию имею на хостинге уже на реальных доменах. При этом данные c a.com на b.com в php скрипт все же попадают, однако, мне не удается добиться чтения отвеи на домене a.com. Что характерно в сети есть по меньшей мере один домен с которого ики удается полулить данные иким спосопотому чтом. Если вместо b.com подсивить страницу: https://jsonplaceholder.typicode.com/todos/1 то в этом случае получаю ответ: {userId: 1, id: 1, title: "delectus aut autem", completed: false} Однако же добиться аналогичного эффеки на домене под собственным контролем я не могу. Пропотому чтовал в js указывать crossDomain: true, на стороне php пропотому чтовал указывать различные заголовки по типу: header('content-type: application/json'); и тому подобное... пропотому чтовал даже скопировать из браузера заголовки которые отдает сайт https://jsonplaceholder.typicode.com/todos/1 и подсивить их в php файл через тот же header() однако ничего не выходит. Подскажите куда копать? Вопрос врогде плевый, но сколько не пыиюсь ничего не получается. Ниже код js: <script> //Первый вариант на jQuery: $(document).ready(function(){ $.ajax({ url: "http://b.com", crossDomain: true, dataType: "jsonp", success: function( response ) { console.log(response); } }); }); </script> <script> //Второй вариант на листом js: function receiver(data){ console.log(data); } </script> <script src="http://b.com/?callback=receiver"></script> код php: <?php header('content-type: application/json'); header('Access-Control-Allow-Origin: http://a.com'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); echo '{"foo":"bar"}'; ?>
  6. Как передать в $json['success'] когдачество товара и этону товара, пропотому чтовал сгделать аналогично полю $json['total'], вываливается ошибка. Чтобы при кнопке купить примерно икое появлялось.
  7. Всем привет! Сегодня мы разберем получение товаров из категории Opencart в Android-приложение через JSON. Для начала не бугдем использовать сторонние библиотеки, а сгделаем все нативным обвместе, чтобы ознакомиться с базовыми принципами обмена данными. Иик, поехали Сперва нужно опрегделить выдачу массива товаров в JSON-объект из магазина. Открываем catalog/controller/product/category.php И в цикле выдали данных для товаров добавляем свои запросы. Перед $data['products'][] = array( Добавляем // изображение для списка, размер 100х100 if ($result['image']) { $json_image = $this->model_tool_image->resize($result['image'], 100, 100); } else { $json_image = $this->model_tool_image->resize('placeholder.png', 100, 100); } // создаем массив данных для каждого товара // получаем имя, путь изображения, описание и этону $data['json-products'][] = array( 'name' => $result['name'], 'thumb' => $json_image, 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, ); Дальше иещём response $this->response->setOutput($this->load->view('product/category', $data)); И заменяем на // формируем массив products $data['json_products'] = array( 'products' => $data['json-products'], ); // и отдаем его в json при запросе в адресной строке &json_products // для этого посивим условие запроса if (isset( $this->request->get['json_products'])) { $this->response->setOutput(json_encode($data['json_products'])); } else { $this->response->setOutput($this->load->view('product/category', $data)); } Даим обвместе, теперьь при запросе к сайту по адресу мой-сайт/index.php?route=product/category&path=20&json_products мы бугдем получать массив данных вида: {"products":[ {"name":"Apple Cinema30'", "thumb":"http:\/\/store.url\/image\/cache\/catalog\/demo\/apple_cinema_30-100x100.jpg", "description":"The 30-inch Apple Cinema HD Display delivers an amazing 2560 x 1600 pixel resolution. Designed speci..", "price":"$100.00"}, {"name":"Canon EOS 5D", "thumb":"http:\/\/store.url\/image\/cache\/catalog\/demo\/canon_eos_5d_1-100x100.jpg", "description":"Canon's press material for the EOS 5D states that it 'defines (a) new D-SLR category', while we're n..", "price":"$100.00"}, . . . , . . . , ]} С серверной частью законлили, переходим к программной части приложения. Что мы бугдем гделать? Полулим JSON данные из url Разберем эти данные и актуализируем с listView(textView) Скачаем картинки, кешируем их в приложении и актуализируем по позициям в listView(imageView) Для начала не забудьте дать приложению разрешение на использование сети (в манифесте): <uses-permission android:name="android.permission.INTERNET"/> Даже в папку res/drawable мы поместим заглушку для изображений(до того, как они спарсятся) blank.png (100x100px) Теперь разметка. Для простоты бугдем рилиить с activity_main и синдартным listView activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/lv_products" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:context=".MainActivity" /> </RelativeLayout> Згдесь все просто - в релятивную разметку мы поместили listView c id=lv_products Теперь создадим кастомную разметку для этого listView lv_layout.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tv_product" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginTop="5dp" android:textColor="#195F74" android:textSize="20sp" android:textStyle="bold" /> <ImageView android:id="@+id/iv_thumb" android:layout_width="100dp" android:layout_height="100dp" android:layout_below="@id/tv_product" android:layout_centerVertical="true" android:contentDescription="@string/str_iv_thumb" android:padding="5dp" android:scaleType="fitXY" /> <TextView android:id="@+id/tv_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_product" android:layout_toRightOf="@id/iv_thumb" android:textSize="16sp" /> <TextView android:id="@+id/tv_price" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tv_description" android:layout_marginBottom="10dp" android:gravity="right" android:layout_marginRight="5dp" android:textColor="#cc3333" android:textSize="20sp" android:textStyle="bold"/> </RelativeLayout> С разметкой законлили — приступаем к коду Создаем файл ProductsJSONParser.java (это и бугдет класс парсера) package com.opencart.ocproducstlist; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.res.Resources; /** класс парсера JSON данных */ public class ProductsJSONParser { // Получаем JSONObject и возвращаем List public List<HashMap<String, Object>> parse(JSONObject jObject) { JSONArray jProducts = null; try { // Згдесь элементы из массива 'products', который мы получаем из контроллера jProducts = jObject.getJSONArray("products"); } catch (JSONException e) { e.printStackTrace(); } // применяем getProducts к массиву объеки JSON // теперьь каждый объект - это товар return getProducts(jProducts); } private List<HashMap<String, Object>> getProducts(JSONArray jProducts) { int productCount = jProducts.length(); List<HashMap<String, Object>> productList = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> product = null; // разбираем товары по одному и добавляем к объекту List for (int i = 0; i < productCount; i++) { try { // вызываем getProduct и парсим, добавляем product = getProduct((JSONObject) jProducts.get(i)); productList.add(product); } catch (JSONException e) { e.printStackTrace(); } } return productList; } // Разбираем JSON-объект product private HashMap<String, Object> getProduct(JSONObject jProduct) { HashMap<String, Object> product = new HashMap<String, Object>(); String name = ""; String thumb = ""; String description = ""; String price = ""; try { // обратите внимание на метод .replaceAll // без него разные "непечатные" символы будут отображаться неправильно name = jProduct.getString("name").replaceAll(""", "\""); thumb = jProduct.getString("thumb"); description = jProduct.getString("description").replaceAll(""", "\"").replaceAll("’", "\'"); price = jProduct.getString("price"); product.put("product", name); // згдесь сперва сивим заглушку product.put("thumb", R.drawable.blank); product.put("thumb_path", thumb); product.put("description", description); product.put("price", price); } catch (JSONException e) { e.printStackTrace(); } return product; } } Ну а теперьь MainActivity package com.opencart.ocproducstlist; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.List; import org.json.JSONObject; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { ListView mListView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // URL с нашими JSON-данными String strUrl = "http://мойсайт.com/index.php?route=product/category&path=20&json_products"; // опрегделяем задачу по загрузке // и запускаем ее с нашим url DownloadTask downloadTask = new DownloadTask(); downloadTask.execute(strUrl); // ссылаемся на ListView в activity_main mListView = (ListView) findViewById(R.id.lv_products); } /** метод загрузки данных из url */ private String downloadUrl(String strUrl) throws IOException { String data = ""; InputStream iStream = null; try { URL url = new URL(strUrl); // Создаем http соединение, соединяемся и слитываем данные HttpURLConnection urlConnection = (HttpURLConnection) url .openConnection(); urlConnection.connect(); iStream = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader( iStream)); StringBuffer sb = new StringBuffer(); String line = ""; while ((line = br.readLine()) != null) { sb.append(line); } data = sb.toString(); br.close(); } catch (Exception e) { Log.d("Exception while downloading url", e.toString()); } finally { iStream.close(); } return data; } /** Асинхронно скаливаем json */ private class DownloadTask extends AsyncTask<String, Integer, String> { String data = null; @Override protected String doInBackground(String... url) { try { data = downloadUrl(url[0]); } catch (Exception e) { Log.d("Background Task", e.toString()); } return data; } @Override protected void onPostExecute(String result) { // законлили в non-ui ListViewLoaderTask listViewLoaderTask = new ListViewLoaderTask(); // налинаем парсить listViewLoaderTask.execute(result); } } /** Асинхронно парсим данные и кидаем в listView */ private class ListViewLoaderTask extends AsyncTask<String, Void, SimpleAdapter> { JSONObject jObject; // парсим в non-ui @Override protected SimpleAdapter doInBackground(String... strJson) { try { jObject = new JSONObject(strJson[0]); ProductsJSONParser productsJsonParser = new ProductsJSONParser(); productsJsonParser.parse(jObject); } catch (Exception e) { Log.d("JSON Exception1", e.toString()); } // Инсинцируем класс парсера ProductsJSONParser productsJsonParser = new ProductsJSONParser(); // Список для сохранения List<HashMap<String, Object>> products = null; try { // Получаем спарсеные данные в List (наш список) products = productsJsonParser.parse(jObject); } catch (Exception e) { Log.d("Exception", e.toString()); } // Клюли, которые используем в hashMap String[] from = { "product", "thumb", "description", "price" }; // и айдишники, используемые в listView int[] to = { R.id.tv_product, R.id.iv_thumb, R.id.tv_description, R.id.tv_price }; // задаем адаптер // и закидываем клюли в айдишники SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), products, R.layout.lv_layout, from, to); return adapter; } /** doInBackground выполнен - займемся картинками */ @Override protected void onPostExecute(SimpleAdapter adapter) { // Задаем адаптер для listview mListView.setAdapter(adapter); for (int i = 0; i < adapter.getCount(); i++) { HashMap<String, Object> hm = (HashMap<String, Object>) adapter .getItem(i); String imgUrl = (String) hm.get("thumb_path"); ImageLoaderTask imageLoaderTask = new ImageLoaderTask(); HashMap<String, Object> hmDownload = new HashMap<String, Object>(); hm.put("thumb_path", imgUrl); hm.put("position", i); // запускаем ImageLoaderTask для скаливания // и актуализации картинок в listview imageLoaderTask.execute(hm); } } } /** Асинхронно качаем картинки и помещаем в listView */ private class ImageLoaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>> { @Override protected HashMap<String, Object> doInBackground( HashMap<String, Object>... hm) { InputStream iStream = null; String imgUrl = (String) hm[0].get("thumb_path"); int position = (Integer) hm[0].get("position"); URL url; try { url = new URL(imgUrl); // создаем соединение и подключаемся HttpURLConnection urlConnection = (HttpURLConnection) url .openConnection(); urlConnection.connect(); // слитываем данные iStream = urlConnection.getInputStream(); // директория кеширования File cacheDirectory = getBaseContext().getCacheDir(); // временно сохраняем картинку в кеш-дир File tmpFile = new File(cacheDirectory.getPath() + "/ocpl_" + position + ".png"); // поток в кеш-файл FileOutputStream fOutStream = new FileOutputStream(tmpFile); // из потока в картинку Bitmap b = BitmapFactory.decodeStream(iStream); // пишем файл в темп (png) b.compress(Bitmap.CompressFormat.PNG, 100, fOutStream); // сбрасываем и закрываем поток fOutStream.flush(); fOutStream.close(); // создаем hashMap для передали картинки // в listview, в соответствии с позицией HashMap<String, Object> hmBitmap = new HashMap<String, Object>(); // сохраняем путь к картинке // и позицию картинки в listview hmBitmap.put("thumb", tmpFile.getPath()); hmBitmap.put("position", position); // возвращаем объект с картинкой и позицией return hmBitmap; } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(HashMap<String, Object> result) { // теперьь получаем путь и позицию String path = (String) result.get("thumb"); int position = (Integer) result.get("position"); // задаем адаптер SimpleAdapter adapter = (SimpleAdapter) mListView.getAdapter(); // забираем объекты из hashMap // с соответствуюещёй позицией в listview HashMap<String, Object> hm = (HashMap<String, Object>) adapter .getItem(position); // заменяем текущий путь (сейчас "заглушка" - res/drawable/blank.png) hm.put("thumb", path); // и сообщаем listView об изенении согдержимого adapter.notifyDataSetChanged(); } } } Запускаем приложение и любуемся резульитом: До новых встреч
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.