Перейти к содержанию

Блоги

Блоги нашего сообщества

  1. Вариант поиска для тех, у кого нет форматирования телефонов перед добавлением их в базу.

    Можно искать как заказы, так и покупателей, или чего-угодно, где есть это поле.

     

    Пример для поиска заказов

    if (!empty($data['filter_telephone'])) {
      $telephone = preg_replace('/\D+/', '', $data['filter_telephone']);
    
      $sql .= " AND (TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(o.telephone, ' ', ''), '(', ''), ')', ''), '-', ''), '/', ''), '+', '')) LIKE '%" . $this->db->escape($telephone) . "%' OR " . $this->db->escape($telephone) . " LIKE CONCAT('%', TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(o.telephone, ' ', ''), '(', ''), ')', ''), '-', ''), '/', ''), '+', '')), '%'))";
    }

    Какие номера находит: 

     

    • +38(050)123-45-67 
    • 501234567 
    • (050)123-45-67 
    • 050 123 45 67 
    • 0501234567 
    • (050)1234567

     

    или любое вхождение в них.

  2. smartcoder
    Последняя запись

    aJuH-71o83M.thumb.jpg.156134d32475c82cc521a6f1e8cf0ee8.jpg

     

    Вы хотите послать своей любимой посылку с бриллиантовым колье. При этом единственный способ — воспользоваться почтой. Можно повесить на посылку любое количество замков. Допустим, открыть замок без ключа никто не может, как и вскрыть посылку. Но вы ни при каких обстоятельствах не хотите рисковать и посылать по почте ключи.
    Как вам быть абсолютно уверенным, что ваша любимая получит подарок (и сможет открыть посылку)?

     

    Напишите свой ответ в комментариях.

    • 1
      запись
    • 0
      комментариев
    • 580
      просмотров

    Последние записи

     

    Топ-10 SEO-модулей от NeoSeo – маст хэв в каждом Интернет-магазине на OpenCart

     

    Все мы, когда нам нужно найти необходимую информацию, заходим на сайты поисковых систем Google или Яндекс, чтобы получить от всемогущих ответ. Поисковики, конечно же, пытаются как можно лучше нам в этом помочь, представляя в результатах поиска самые релевантные (наиболее подходящие запросу), на их взгляд, страницы. Вы, как владелец Интернет-магазина на OpenCart, конечно же, не отказались бы от бесплатного, органического трафика по своей тематике. Отсюда вопрос: как сделать так, чтобы поисковая система решила, что именно страницы вашего Интернет-магазина являются наиболее подходящими для запросов покупателей, чтобы появляться в их результатах поиска?

     

    Ответ простой – нужно как минимум провести все работы, которые относятся к базовой SEO-оптимизации, ну и конечно же работать в направлении создания полезного для покупателей контента, улучшая по дороге, показатели ссылочного веса. Всем известно (за что и ругают во многом OpenCart), что "голый OpenCart", который можно скачать и использовать для создания собственного Интернет-магазина бесплатно, созданный недостаточно хорошо с точки зрения даже базовой поисковой оптимизации. А куда ж сегодня без базового SEO, когда стоимость клика в контекстной рекламе Google Adwords или Яндекс.Директ постоянно увеличивается, а в определенных категориях уже достигает 10$ и выше, а конкуренция продолжает расти? Правильно, никуда, в этом направлении стоит работать и начинать лучше поздно, чем никогда.

     

    Для того, чтобы вы провели элементарную, хотя бы базовую SEO-оптимизацию Интернет-магазин на OpenCart вам пригодится подборка ТОП-10 SEO-модулей от нашей веб-студии.

    SEO-модули для OpenCart помогут вам значительно упростить и автоматизировать процессы, чтобы не писать код с нуля. Конечно же, одних только модулей недостаточно для того, чтобы занять позиции лидера в поисковой выдаче, однако, они являются той основой, с которой необходимо начинать.

    Рассмотрим основные моменты базовой SEO-оптимизации и наши программные решения, которые мы сами используем для продвижения проектов наших Клиентов (эти модули стоят уже в наших сборках SEO-Магазина по-умолчанию, но не только они...)

    1. SEO-структура интернет-магазина

    Решение: Модуль Фильтр товаров {SEO-фильтр} для OpenCart – создание фильтров и посадочных страниц.Модуль Фильтр товаров {SEO-Фильтр} для OpenCart

     

    Правильная SEO-структура сайта необходима для получения высоких позиций по средне и низкочастотным запросам. Чтобы поисковые роботы выдавали ваш Интернет-магазин по обширному, очень широкому количеству запросов вашей тематики, они должны определить и признать такие страницы вашего сайта наиболее подходящими к пользовательским запросам (наиболее релевантными). Если для каждой семантической группы товаров создавать отдельную посадочную страницу, то можно удовлетворить как поискового робота, так и потребность клиента, и тем самым обеспечить высокие продажи.

    Модуль SEO-фильтр даёт возможность создания любых, необходимых вам посадочных страниц. С его помощью вы можете создавать тысячи посадочных страниц, объединяя необходимые значения фильтров (по цвету, по виду, по классу, по производителю и т.д.) и значения категорий. То есть, для любого возможного сочетания фильтров и категорий будет создана наиболее релевантная посадочная страница с человеко-понятным адресом (ЧПУ URL), для которой будет возможность прописать и метатеги. Подробнее здесь.

    2. Быстрая индексация сайта

    Самая быстрая Карта сайта (sitemap.xml), Модуль для Opencart

    Решение: Модуль Карта сайта для OpenCart – автоматизированная генерация Карты сайта

     

    Для того, чтобы про все ваши новинки роботы узнавали оперативно, нужно давать им соответствующую информацию в рекомендованном ними формате. Именно в карте сайта мы говорим роботам, какую страницу и когда нужно проиндексировать, с какой периодичностью им стоит это делать и т.д. Чтобы эту информацию не вносить руками менеджеру магазина мы создали этот модуль, который делает всё это автоматически. Для достижения большей скорости отдачи данных, разработана возможность разбивать группы товаров по 10000 ед.

    Модуль Карта сайта для OpenCart, самостоятельно генерирует и отдаёт поисковикам всю необходимую им информацию и вносит изменения после любых обновлений в Интернет-магазине: добавлений новых категорий, посадочных страниц, карточек товаров, статей в блоге и т.д..

     

     

    3. Правильная индексация нужных страниц

    Генератор robots.txt, Модуль для OpencartРешение: Модуль Генератор robots.txt для OpenCart – автоматизированная генерация файла с указанием "разрешенных" и "запрещенных" директив.

     

    После того, как вы создали множество посадочных страниц, определили, что и когда нужно индексировать с помощью карты сайта, нужно указать, что именно индексировать нужно, а что вообще закрыть от поисковых роботов, чтобы роботы не тратили т.н. краулинговых бюджет вашего Интернет-магазина на OpenCart. Это очень важно для Интернет-магазинов с большим количеством товаров. Так, при сочетании фильтров в разной очередности, но одинаковой комбинации, могут возникнуть страницы с идентичным контентом (дубли страниц). Это, в свою очередь, негативно влияет на уникальность – важную характеристику сайта.

    Также от ботов нужно закрывать страницы, которые не нужны пользователю (html-файлы с информацией, страницы с архивами, скрипты и другие маловажные ресурсы). Автоматически формировать файл robots.txt можно с помощью модуля Генератор robots.txt, наполняя его необходимым ссылками в административной панели сайта.

    4. SEO-URL, H1, метатеги

    Генератор ссылок ЧПУ и метаданных, Модуль для OpencartРешение: Модуль Генератор ЧПУ и метаданных для OpenCart – предоставление URL-адресам страниц сайта человекопонятного вида и генерация метатегов по указанному шаблону с возможностью добавлять забавные EMOJI.

     

    Человекопонятный вид URL положительно влияет на ранжирование сайта при поисковой выдаче. То есть, у сайтов с SEO-URL больше шансов попасть на высокие позиции в поисковой выдаче, когда URL адреса выглядят так, чтобы их можно было прочитать в транслитерации. Это удобно и покупателям, когда на вашу ссылку будут указывать кросс-ссылки с других сайтов или в сниппетах, пользователям будет понятно, что именно содержится на сайте после перехода по указанному адресу.

    SEO-оптимизированные метаданные упрощают поисковым работам процесс считывания и понимания информации с вашего сайта. Если правильно указать заголовок, Title и Description для каждой страницы (а они, в идеале, должны быть уникальными), поисковые роботы, скорее всего проиндексируют вас быстрее и качественнее (давая вам преимущество над сайтами, которіе об єтом не позаботились). Модуль Генератор ЧПУ и метаданных автоматически приводит URL к ЧПУ виду, а, задав правильные шаблоны, формирует все необходимые метаданные.

     

    5. Оперативное обнаруживание битых, 404-х страниц

    Отслеживание несуществующих страниц, Модуль для OpencartРешение: Модуль Отслеживание битых ссылок для OpenCart – автоматический поиск и обнаружение несуществующих и / или 404-х страниц.

     

    Показатель отказов сайта также довольно весомый фактор для поисковых роботов, который они берут во внимание, когда определяют качество страницы глазами пользователя. Страницы с ошибкой 404 могут возникнуть, если вы удалили или переместили страницу, если изменили URL или же, если пользователь допустил ошибку.

    Первые два пункта могут быть полностью под вашим контролем с помощью модуля Отслеживание битых ссылок. Такое программное решение формирует файл со списком таких страниц, и вы легко можете исправить эту ситуацию. Например, создать перенаправление на релевантную страницу, что минимизирует количество 404-х ошибок и сохраняет ссылочный вес, который также является важным фактором при определении позиций вашего Интернет-магазина на OpenCart в поисковой выдаче. Зачем терять покупателей и вес? Просто вовремя делайте редиректы!

    6. Сохранение ссылочного веса и трафика со старых URL

    Решение: ММенеджер создания Редиректов, Модуль для Opencartодуль Менеджер редиректов для OpenCart – перенаправление запросов, веса и трафика на актуальные страницы.

     

    Среди причин, когда необходимо делать редирект, можно выделить:

    • склеивания домена с www и без www;
    • изменения домена со старого на новый;
    • перенос страницы: поисковики и посетители переходят на новую страницу вместо неработающей.
    • удалили категорию, статью или товар и появилась 404-я страница

    Как можно заметить, редирект полезен как для пользователей, так и для поисковых роботов. Также он сочетает показатели страниц и позволяет не терять позиции в поисковой выдаче. Автоматизирует этот процесс модуль Менеджер редиректов. Он просто незаменим, если на сайте много позиций, а вручную сделать эту работу чрезвычайно трудно.

     

    7. Только актуальная информация на сайте, но не теряем трафик из поиска для хорошо проранжированных карточек товара

    Архивный товар, модуль для OpencartРешение: Модуль Архивный товар для OpenCart – присвоение неактуальному товару статуса "архивный".

     

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

    Для того, чтобы сохранить клиентов и не потерять ссылочный вес, можно использовать модуль Архивный товар. Он перенесет товар в категорию “архивных”, тем самым сохранит возможность для клиента перейти на сайт с поисковой выдачи или по прямой ссылке, хотя такой товар не будет отображаться при поиске на самом сайте. Если вы сохранили такого посетителя, вероятно, когда он увидит, что товара нет в наличии, он перейдет на похожий товар или выберет интересную ему категорию, т.е. останется на сайте и таким образом, вы сохраняете шансы на то, что пользователь совершит покупку, а не просто закроет страницу браузера.

    8. Эффективный Интернет-маркетинг, анализ покупок по трафику

    Источник заказа, Модуль для OpencartРешение: Модуль Источник заказ для OpenCart – мониторинг источников переходов клиента перед покупкой.

     

    Для того, чтобы вести эффективную рекламную кампанию и понимать, какой доход вы получаете от рекламы по разным источникам (в т.ч., чтобы увеличивать бюджет для эффективных), нужно четко понимать, какие инструменты продвижения дают результат. Клиенты, конечно же, могут приходить из разных источников. Это может быть:

    • органическая выдача;
    • контекстная реклама;
    • социальные сети;
    • маркетплейсы и прайсагрегаторы;
    • ссылки с других ресурсов.

    Для того, чтобы определить, какой способ наиболее эффективен для вас, нужно установить модуль Источник заказа, и проследить, откуда к вам пришел клиент. В будущем вы сможете усиливать присутствие и продвижение в тех источниках, которые приносят наибольший доход.

    9. Аналитика от Google

    Google Analytics, Модуль для OpencartРешение: Модуль Google Analytics для OpenCart – сбор статистики для построения стратегии продвижения сайта.

     

    Google Analytics является более совершенным инструментом для определения поведения пользователей и анализа расходования рекламных бюджетов, чем предыдущий модуль. С помощью этого сервиса можно формировать множество отчетов, что очень эффективно для анализа и определения способов продвижения сайта.

    Модуль Google Analytics упрощает подключение скрипта и настройку электронной коммерции в вашем Интернет-магазине. То есть, вам нужно будет скопировать и вставить в соответствующее поле только (ID) Google аналитики. Сам скрипт будет создан автоматически. Среди преимуществ программного решения можно выделить:

    • большую гибкость и удобство в использовании сведений аналитики;
    • автоматическое формирование тегов ремаркетинга и настройка рекламной кампании без дополнительных усилий;
    • возможность настроить электронную коммерцию и получать данные по каждой трансакции, в т.ч. и по каждому источнику трафика.

    10. Продвижение в поисковой сети Yandex

    Yandex Metrica, Модуль для Opencart

    Решение: Модуль Подключение Yandex Metrika для OpenCart – сбор статистики для построения стратегии продвижения сайта.

     

    Как и Google Analytics, Yandex Metrika – это система, которая собирает данные о посещаемости вашего сайта и формирует их в удобном для восприятия виде.

    Модуль Yandex Metrika обеспечивает похожую функциональность, что и модуль Google Analytics, но здесь можно ещё и посмотреть за поведением покупателя на сайте с помощью веб-визора. Настройка и установка не занимает много времени, но даёт много пищи для размышлений, в т.ч. вы сможете понять, насколько вашим покупателям удобно пользоваться вашим Интернет-магазином.

     

     

     

     

     

    РЕЗЮМЕ. Если вас не устраивают показатели посещения вашего Интернет-магазина из органической поисковой выдачи – рано или поздно вам придётся заняться поисковой оптимизацией. Наша подборка, это маст хэв для проведения базового SEO, с чего и рекомендуем начать процесс оптимизации вашего сайта. С ее помощью вы можете как комплексно осуществить оптимизацию, так и постепенно по пунктам, шаг за шагом улучшать сайт в глазах поисковиков.
     

    Желаем вам хороших результатов,

    Команда NeoSeo
     

     

  3. AWS

    • 2
      записи
    • 9
      комментариев
    • 1968
      просмотров

    Последние записи

    Все модули в списке проверенные временем!

    Имейте ввиду, шаблон это шаблон - морда сайта , А модули это функционал!

    Общие:

    1. Сборка ocStore на opencart  - актуальная v2.3.0.2.3 - от  сообщества OpenCartForum >  тут .
    2. Сборка OpencartPRO - платная   >  тут .
    3. ***Сборка под оптовые продажи на основе ocStore v2.3.0.2.3 - подробности в ЛС.
    4. Скрытие категорий от групп покупателей   >  тут .
    5. Определение города по IP  - (Geo IP)    >  тут .
    6. Всплывающие окона (формы) + Торги с покупателем - Конструктор  >  тут .
    7. SEO PRO oc3x - сео про для опенкарт 3х  ко мне в ЛС .
    8. Robots noindex  -  >  тут .
    9.  404  страница  >  тут .
    10. Автоматическое заполнение SEO_URL   >  тут .
    11.  URL генератор для 3.0    >  тут .
    12. Seo Keyword Manager  -  тут .
    13. SEO - Title и Мета Description для страниц Акций, Производителей и т.д.   > тут .
    14. SEO мультиязык   >  тут .
    15. Убираем грубую SEO ошибку проверки входящих данных - SEO DATAFIX  >  тут .
    16. Корректный перенос Opencart на HTTPS протокол - SEO HTTPS FIX PRO   >  тут .
    17.  Дополнительные мультиязычные вкладки в карточку товара   >  тут .
    18. Обратный звонок PRO  >  тут .
    19.  Jivosite - Онлайн консультант (чат)   >  тут .
    20.  Функционал - Запомнить меня при авторизации пользователя   >  тут .
    21.  

     

    АДМИНКА:

    1. Защита админки от вирусов и хакеров >  тут .
    2. Логирование действий пользователей админки    >  тут .
    3. Исправленный модификатор для установки модулей без надобности включения FTP в настройках  >  тут .
    4.  АОП - Парсер \ Импорт \ Экспорт - Автоматическая обработка прайс-листов  >  тут .
              ----- Журнал работы модуля "Автоматическая обработка прайс-листов"   >  тут .
    5. Batch Editor - Пакетное редактирование товаров  -   > тут .
    6. Закупочная цена товаров - CostPrice   >  тут .
    7. Почтовая рассылка PRO    >  тут .
    8. Заметки администратора    >  тут  .
    9. TOTAL AMOUNT - Общая сумма всех заказов покупателя в списках  >  тут .
    10.   Чистильщик кэша и логов  >  тут  .

     

     

     

    Карточки Товаров

    1. Куча различных модификаторов для опций  >  тут .
    2. Выбор опции по умолчанию  >  тут .
    3. BTN link | Произвольные мультиязычные ссылки вместо кнопки купить   >  тут .
    4. HYPER KIT SERIES  Комплекты серий товаров - наборы товара   >  тут .
    5. Подсказка для атрибутов, групп атрибутов, опций и их значений   >  тут .
    6. Похожие товары по атрибутам  >  тут .
    7. Автоматический подбор рекомендуемых  >  тут .
    8. Уведомление о поступлении товара >  тут .
    9. Купить в 1 клик / Быстрый заказ - PRO  >  тут .
    10. Метки | Поиск продуктов - уникальные мета-теги, ЧПУ - SEO CMS PAGES  > тут .
    11. Crear : (File Downloads) - Файлы для скачивания  > тут .
    12. Load more – кнопка “показать еще”   >  тут .
    13. Архивный товар / Снят с производства  >  тут  .
    14. Вы

     

    Корзина и Одно страничное оформление заказа

    1.   Одно страничное оформление заказа и корзина Simple   >   тут .
    2.   Управление доставкой и оплатой  >  тут .
    3.   CART CACHE - кэширование корзины   >  тут .
    4. Брошенная корзина + вечная корзина + редактор корзин  >  тут .

     

    Заказы

    1. Расширенный редактор заказов - OrderPro   >   тут .
    2. Менеджер заказов >  тут .
    3. Автоматическое изменение статуса заказа и уведомление    >  тут .
    4. Шаблоны писем при оформлении заказа и изменении статусов заказа и т.д. >  тут .
                                                                        -  шаблоны  тут >   http://beautiful-email-newsletters.com/
                                                                        - и тут >  http://htmlemailgallery.com/
    5. Выгрузка заказов в EXCEL, PDF, CSV, распечатать список заказов  >  тут .
    6. Комментарии к заказу и покупателям   >  тут  .
    7.  Исправление транзакций   >  тут  .
    8.  

     

    Шаблоны

    1. Платные  >  тут .
    2. Бесплатные  >  тут .

     

    Лояльность, Акции, Скидки и т.д.

    1. Товар дня - Акция    >  тут .
    2. Скидки - Пользовательские, Накопительные, Количественные, Комплектные, Оптовые\Групповые цены, Акции и т.д. -  >  тут .
    3. Комплекты (вместе дешевле) PRO версия  >  тут .
    4. Цепляем уходящих клиентов  >  тут .
    5.  

     

    Блоги

    1. Блог | Новости | Отзывы | Галерея | Формы SEO CMS TOP 2    >   тут .
    2.  

     

    Дизайн:

    1. Персонализированные шаблоны - от   >  тут .
    2. HYPER Positions +70 позиций модулей   >  тут  .
    3.  ...

     

    Доставка

    1.   Модуль Shiptor - агрегатор доставки    >  тут .
    2.   Яндекс доставка     >  тут .
    3.  Оценка доставки на страницах магазина и в карточках товара   >  тут .
    4.  

     

    Оплата \ Платежные системы

    1. Огромное количество модулей оплат   >  тут .
    2.  

     

    Прочее

    1. Торговая площадка    >  тут .
    2.  

     

    Аудит

    1. Экспресс аудит сайта   >  тут .
    2.  

     

    Оптимизация

    1. Layout Type, ускорение мобильной версии    >  тут  .
    2. SiteMap кому нужно смотрите  по ссылке  >  тут .
    3. Google Remarketing Feed Generator   >  тут .
    4.  Оптимизация полная и скорость ИМ - от  @snastik  >  тут .
    5.  Оптимизация полная и скорость ИМ - от @markimax   >  тут .
    6.  

     

    Продвижение  - SEO, СММ, Контекст

          -  Пишите мне в лс есть шикарная команда

     

    Тексты, описания, статьи, рерайты, копирайты и т.д. и журналисты тож есть

    1. скайп  pishemvsevastopol

     

    Нормальный хостинг тут .

    позже ещё добавлю по своему усмотрению..
    Предлагать мне добавлять сюда свои модули не нужно!
    Если всё подряд начну добавлять это будет каша а не набор!

    Если в списке чего то вашего нет, то не нужно лепить минусы - просто идите мимо и не позорьтесь, всё то, что выше это исключительно мой выбор!

     

    P.S.
    ***Реализация интернет магазина под оптовые продажи, отдельный каталог товаров прайс листами с взаимосвязанной корзиной, доработка корзины и необходимых модулей под оптовые продажи.
    Подробности спрашиваем в личные сообщения.

    • 1
      запись
    • 12
      комментариев
    • 114
      просмотра

    Последние записи

    Всем привет!

     

    Сегодня мы разберем получение товаров из категории 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();
            }
        }
    }

    Запускаем приложение и любуемся результатом:

    nexus.thumb.jpg.364147d8815428c5240f877d26904e83.jpg

     

    До новых встреч :)

     

  4. В основном, эта проблема встречается с Elevatezoom и всякими Colodbox'ами

     

    Решение простое: pointer-events: none; на картинке

     

  5. konorws
    Последняя запись

    Всем привет. Это буде короткая запись но очень полезная.
    Тема данной публикации: Как сделать redirect в PHP и отправить POST данные. 

     

    Кто сталкивался тот знает в чем проблема. Давайте посмотрим основные варианты которые предлагают на форумах.
     

    1) Создать форму и отправить ее.

    Суть заключается в том что бы на лету сгенерировать html форму и отправить ее. 
    Пример кода

    function redirect_post($url, array $data)
    {
        ?>
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <script type="text/javascript">
                function closethisasap() {
                    document.forms["redirectpost"].submit();
                }
            </script>
        </head>
        <body onload="closethisasap();">
        <form name="redirectpost" method="post" action="<? echo $url; ?>">
            <?php
            if ( !is_null($data) ) {
                foreach ($data as $k => $v) {
                    echo '<input type="hidden" name="' . $k . '" value="' . $v . '"> ';
                }
            }
            ?>
        </form>
        </body>
        </html>
        <?php
        exit;
    }

    Как на меня довольно страшно выглядит тай костыль костылем.

     

    2) Сохранить данные в Session

    Думаю пример кода делать не нужно и там понятно как работает.  
    Тут я скажу что это один из самых адекватных способов, хотя влечет за собою несколько лишних действий. (Проверка, удаление и так далее).

     

    Другое. 
    Примеров еще много начиная от Curl проксированния заканчивая fopen. Думаю дальнейшие приведение примеров лишние.

    А теперь Самое адекватное и правильное решение.

    Заключается оно в том что бы использовать 307 код редиректа.

    307 - редирект это временое перенаправление - так сказано в первых 4 силках в Google по запросу 307 Redirect.

    А теперь главный нюанс "Если указать данный код то с редиректом будут отпрвленны данные из переменой $_POST"

     

    Реализация PHP

    <?php
    
    $_POST['firstName'] = 'Maykl';
    $_POST['lastName'] = 'Yatsyshyn';
    
    header("Location: <URL>", true, 307);
    
    ?>

    Использование в Opencart и сборках

    <?php
    
    // $this->request->post = &$_POST;
    
    $this->request->post['firstName'] = 'Maykl';
    $this->request->post['lastName'] = 'YATSYSHYN';
    
    $this->response->redirect($URL, 307);
    ?>

    Замечание вместе с данными которые вы записали (firstName, lastName) будут отправлены все данные которые уже били в $_POST это может пригодится когда вам нужно перенаправить данные с формы на другой обработчик или же назад на форму.

  6. Господа, все мы сталкиваемся с ситуацией, когда необходимо сформировать большой набор данных, сайтмап, yandex-market фид, и любая подобная задача, требует всегда очень много ресурсов. 
    Большинство авторов таких дополнений слыхом не слыхивали ни про CLI-PHP, ни про возможность органично выделять ресурсы исключительно под собственные скрипты, не затрагивая общие настройки сервера.

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

     

    Приведу пример, который произошел буквально на днях.

    Обратились ко мне старые друзья с просьбой посмотреть, почему падает магазин.

    Да они добавили 30 региональных поддоменов, увеличилась нагрузка, но это не повод, чтобы 4гб памяти и 4гб SWAP забивались за 10 минут.


    Смотрим в настройки php_memory_limit 1gb. Система работает в связке nginx+php-fmp, и менеджер fpm резирвирует под каждый поток гиг памяти. Но нам то надо максимум 256МБ, для генерации любой страницы. Ок меняем настройки, немножко вносим тюнинг в конфиг php-fpm, все заработало, ресурсов хватает запас есть. Но из-за нехватки памяти отвалилась генерация YML, от одного известного автора.  И Яндекс-маркет блочит магазин. Новый год, продажи стоят.


    Что делать?

     

    Писать автору, скорее всего бесполезно. Я думаю, что любой автор сказал - увеличивайте ресурсы сервера, у вас нехватка памяти, вы сами виноваты, у вас большой магазин. 
    Я даже уверен, что 99% авторов дополнений  так бы сделали.

     

    Но послушайте. Ну есть же возможность задавать настройки "на лету" прямо из выполняемого скрипта.

    И просто достаточно было добавить в код генерации яндекс-фида одну строку:

     

    ini_set("memory_limit",-1);

     

    И все.. Для всех скриптов, которые приходят на web-сервер у нас 256мб лимит, и наших 4 гигабайт хватает с головой обслужить весь входящий трафик и ботов. 
    И без вопросов у нас генерится YML, которому мы разрешили использовать память безлимитно.

     

    Простейшая же задача как 2+2. Но продав более 1000 копий своего дополнения, автор даже не задумывался о подобных проблемах. 
    Не будьте как автор!

     

    И еще. Не стесняйтесь вместо формирования каких то супермассивов, сразу писать все в файл.

    Вместо какого нить  $thisoutYML->addItem($item), ведь очень просто делать $thisYmlSaveItemTofile($item).
     

    Ну и практически все фиды можно отдавать в .gz экономя место и время.

  7. Useful IT

    • 1
      запись
    • 0
      комментариев
    • 169
      просмотров

    Последние записи

        Полезное:

         1) Рефакторинг и Паттерны проектирования

     

        Безопасность:

         1) Проверка подлинности модуля или шаблона.

     

        Самоорганизация:

         1) Доска задач

     

        Шпаргалки:

         1) jquery карта функций.

         2) Могу ли я использовать.

     

         Сервисы:

         1) Конструктор и библиотека регулярок.

         2) Оффлайн шпаргалка по регуляркам.

     

        Оптимизация:

         1) Сжатие изображений.

     

        Разное:

         1) https://github.com/

         2) https://bitbucket.org/

     

        Тоже полезно:

         1) https://www.chess.com/ru

     

    В планах расширить, исправить, доработать! ;)

  8. Хочу поделится свои опытом реализации интернет-магазина на движке ocStore со стандартным шаблоном и рассказать какие модули я использовал чтобы улучшить взаимодействие покупателей с сайтом.

     

    После установки самого движка и первоначальной настройки: валют, локации, описания магазина и так далее, я установил модуль “SEO CMS TOP 2: Блог | Новости | Отзывы | Галерея | Формы”. Это модуль я настроил на отображение новостей сайта и отзывов к товарам, кстати, при написании отзывов к товару если пользователь совершил покупку,  то будет соответствующая отметка об этом, что очень хорошо сказывается на реакции людей читающих этот отзыв. Также я сделал дополнительные страницы сайта для отображения фото и видео отзывов которые присылают покупатели.

    Следующий модуль который решает вопрос быстрого поиска нужного товара по характеристикам это Фильтр товаров Go Filter 3.0 - 2.0 SEO keywords для Opencart/Ocstore 3.x, 2.x. Модуль прост в настройке и удобно отображается в мобильной версии, это для меня очень важно, т.к. у меня посетителей с мобильных устройств больше 40%.

    После мне пришлось искать модуль быстрого просмотра товара, чтобы покупатели не заходили в каждый товар, а прямо из категории могли в пару кликов внести товар в корзину. Выбор пал на модуль “Быстрый просмотр товара PRO oc 15x / 2.x” это единственный модуль который удовлетворил меня по функционалу, но сразу скажу что он не идеален и там есть над чем поработать в плане взаимодействия с ним при наборе большого количества товара в корзину.

    Для быстрого поиска товара на сайте я выбрал простой модуль “Search suggestion - поиск с автодополнением PRO”, он закрывает вопрос быстрого поиска по артикулу товара у моих клиентов.

    Для решения вопросов со скидками я выбрал модуль “Разные цены для групп покупателей”, он крайне простой в настройке. Создал несколько групп покупателей с разной скидкой и подключил модуль накопительной скидки с автоматическим переносом покупателя в группу - Customer Group Auto Switcher. Получилось что когда клиент регистрируется на сайте то попадает в группу “обычных покупателей”, и после того как совершает покупки на сайте модуль Customer Group Auto Switcher отслеживает общую сумму совершенных заказов и при наборе определенной суммы переносит клиента в группу с определенной постоянной скидкой и уже тогда модуль Разные цены для групп покупателей задает все цены на сайте со скидкой.

    На разных этапах взаимодействия покупателей с сайтом я использую автоматические электронные письма клиентам, для этого я установил модуль “Шаблоны писем, v3.0.1”. С помощью этого модуля я настроил шаблоны писем для разных ситуаций, так например при переходе из одной группы клиентов в другую, клиент получает поздравительное письмо о том что у него увеличилась скидка, или при достижении определенного статуса заказа приходит письмо с просьбой оставить отзыв о товаре и интернет-магазине в целом и в этом письме есть ссылки на соцсети и сайты “отзовики”. Для автоматической смены статуса заказа я использую модуль “Автоматический перевод заказов в другой статус по тайм-лимиту, v1.2” этот модуль “закрывает” заказ и переводит его статус через несколько недель в “завершенный” и клиент получает письмо с просьбой написать отзыв о чем я писал выше. Также для усиления “эффекта скидки” я с помощью всё того же SEO CMS TOP 2: Блог | Новости | Отзывы | Галерея | Формы создал в личном кабинете и на сайте информационные сообщения в которых написана текущая скидка и статус клиента, эти сообщения разграничены к показам по группам и меняются от того как клиент переход из одной группы в другую. Это всё создаёт дополнительные связи магазина с клиентом.

    Что касается наполнения сайта товарам и автоматизации продаж то здесь я использую модуль 1с для сайта от “meteor-it”. Модуль работает с 1с Управление Торговлей 11. В 1с у меня занесен весь товар по категориям и выгружается на сайт уже с описанием и остатками. Также в 1с выгружаются заказы с сайта. И получается что у меня менеджеры вообще не заходят в админку сайта и ведут всё в 1с, что облегчает мне жизнь. У меня бывают товары в которых есть не только опции “размер” но и “цвет”, для того чтобы в 1с товар выгружался корректно пришлось установить модуль “Связанные / зависимые опции Opencart 2.x 1.4.3/2.4.6”.

    Также я использую модуль для выгрузки клиентов в службу рассылки SendPulse, чтобы потом через него совершать массовые рекламные рассылки, чтобы сервер на котором хостится сайт не попал в спам базы.

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

    Буду рад ответить на интересующие вопросы.

    • 1
      запись
    • 13
      комментариев
    • 706
      просмотров

    Последние записи

    Порой пользователи OpenCart (особенно начинающие) сталкиваются со всякими «мутными» ресурсами, где им предлагают скачать различные модули и шаблоны, либо купить их по привлекательной цене. К сожалению, владельцы таких ресурсов все больше наглеют и пытаются зарабатывать на своих посетителях, пользуясь их неосведомленностью. Для этого они делают свои веб-сайты похожими на легальные площадки, поэтому неопытному человеку очень легко запутаться среди всех этих ресурсов.

     

    Предлагаю решить проблему неосведомленности пользователей о том, можно ли доверять какому-то ресурсу, с помощью создания некой базы опасных ресурсов, распространяющих вредоносное ПО. Родилась идея сделать простой проверочный сервис Copyright Check.

     

    Данный веб-сайт предназначен для того, чтобы помочь пользователям OpenCart отличать легальные ресурсы, где выкладываются подлинные модули и шаблоны для OpenCart, от варезников, где распространяется взломанное и вредоносное программное обеспечение под видом легального.

     

    Понять, что вы столкнулись с варезником, не так уж сложно, если знать их характерные черты:

    1. В разделах с дополнениями вы видите слова «nulled», «cracked», «без ioncube», «складчина»
    2. На веб-сайте есть т.н. «подписки», «vip-аккаунты» и прочие платные механизмы, которые открывают доступ ко всем дополнениям
    3. На странице дополнения от вас требуют совершить какое-то действие, чтобы его скачать (поставить лайк, подписаться)
    4. Загрузка дополнений ограничена для тех, кто недавно зарегистрировался, но эти ограничения снимаются за отдельную плату
    5. Все дополнения загружены одними и теми же пользователями и имеют одного автора с логином «admin» или с названием ресурса
    6. Ссылка на загрузку дополнения лежит под спойлером (хайдом), для раскрытия нужно заплатить администрации
    7. На дополнения организовываются «складчины», т.е. групповая покупка одного дополнения
    8. После скачивания дополнения вы обнаруживаете, что архив запаролен, а чтобы узнать пароль, нужно заплатить администрации
    9. У ресурса отсутствует какая-либо юридическая информация, а из контактов указан только скайп или электронка
    10. Ссылки на загрузку дополнений ведут на бесплатные файлообменники, но не на сервер самого ресурса

     

    Конечно, это не все признаки того, что ресурс однозначно представляет опасность, поэтому если вы не уверены, с каким именно ресурсом имеете дело, воспользуйтесь этим сайтом и просто введите адрес подозрительного ресурса в поле ввода. Если нам что-либо известно об указанном ресурсе, вы сразу получите информацию.

     

    Никаких рекламных целей я не преследую и на сайте никаких ссылок куда-либо, кроме документации PHP и специальной почты opencart.check@gmail.com, нет, но если кто-то сомневается в прозрачности моих намерений или думает, что я таким образом решил себя пиарить - сделайте и распространяйте свои аналоги, это совсем не сложно и на это потребуется 1 вечер, а польза от существования таких сайтов будет для абсолютно каждого пользователя или разработчика.

     

    UPD: На сегодня (15 февраля 2019 года) в базу добавлено 53 ресурса и этот список продолжает расти, спасибо всем неравнодушным, кто помогает с наполнением базы!

  9. Пришла весна, всё пробуждается от морозника, каждый нормальный человек уже сделал какие-то планы на этот год, и уже третий месяц их воплощает в жизнь, не покладая рук, но не я. Хаос продолжает царить в моём расписании, планах и жизни. К чему я это?

    Как-то пару лет назад запартнёрился я с предпринимателем, хороший мужик, занимается перепродажей бытовой техники. Взял его магазин на обслуживание. Всё было хорошо, до сих пор партнёрствуем, но вот одна засада магазин встал и не растёт и даже начал терять позиции. Можно сравнить с машиной, которая села на пузо и вроде колёса крутится и движок ревёт, но прогресса нет - не едет. Вокруг все растут, даже появляются всё новые и новые конкуренты, в прошлом году в регион зашла Мвидио, и получается что все утирают нос, не побоюсь присвоить, моему магазину. Ну и вот про весну, решил я толкнуть магазин к лету в общем. Есть время поправить косяки и поднять магазин с колен. Решил делать всё это публично, чтоб была дополнительная мотивация не ударить в грязь лицом, да и показать всем, что это не так страшно, если знаешь что делаешь.

     

    UPD 26.03.18 ==============================================================================

     

    Цели к лету:

    1) Увеличение посещаемости магазина с поисковых систем.

    2) Увеличение продаж через магазин.

     

    Средняя посещаемость в день на данный момент составляет 60 - 100 человек

     

    Замеры посещаемости

     

    Ссылающихся на страницы домена сайтов в среднем 250

     

    Screenshot_4.thumb.png.a335acb4fe97c1ad02b2e485aceec88a.png

     

    Задачи на ближайшее время:

    1) переделать структуру категорий (посадочных страниц),

    2) добавить дополнительные посадочные страницы, удовлетворяющие запросы пользователей,

    3) пересобрать СЯ,

    4) переписать текста,

    5) переписать мета данные посадочных страниц.

     

    UPD 03.04.18 ==============================================================================

     

    В магазине обнаружена ошибка в работе движка, было принято решение перекатать полностью весь магазин, сразу обновив версию до стабильной ocStore 2.3.0.2.3, раз делать как говориться, так делать. Нельзя делать что-то снаружи, зная что есть проблема внутри. Если это заказ, проблему нужно минимум озвучить, чтоб клиент знал о ней, если не потянет финансово разобраться с ней. Так а тут речь идёт о своём партнёрском магазине. Это как красить автомобиль, зная что под шпаклёвкой гниль. Всегда нужно делать всё качественно. Чем больше погружаюсь, тем более вырисовываются всё новые и новые проблемы, который нужно решать перед оптимизацией.

     

    Также было решено переделать каталог радикально, раскидав главные категории на поддомены (мультимагазин с одной базой), для тестирования предположения, что более узконаправленные тематики, в выдаче показываются выше, по сравнению со "свалками". Поэтому работы увеличилось в несколько раз.

     

    Задачи на следующие 2 недели:

    1) Поднять свежую версию магазина;

    2) Перекинуть дизайн со старой версии;

    3) Создать 20 (под)магазинов, раскидать товар по ним.

     

     

    UPD 10.06.18 ==============================================================================

     

     

    Время идёт, проект стоит на месте. Всё этого из-за проектов, которые навалились на меня в последнее время. Но я почти всё разгрёб и сейчас в плотную занимаюсь обновлением дизайна и ассортимента товаров на подопытном. Это очень важная составляющая.

     

    Дизайн - многие люди относятся к нему с пренебрежением, пытаются сэкономить, воруя у самого себя.

    Есть такое понятие как конверсия сайта/магазина. Конверсия - это отношение числа всех зашедших за день посетителей к кол-ву заказов. Например: у вас магазин с среднесуточным показателем в 100 посетителей. При этом у вас в среднем по 2 заказа в день. 2 заказа / 100 посетителей и * 100% = итого конверсия вашего магазина 2%.

     

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

     

    Некоторые "предприниматели", пренебрегают таким важным пунктом как юзабилити=дизайн/простота - делают на коленке магазин, размещают товар, нагоняют/покупают трафик и ...... и ничего, при лучшем варианте несколько заказов. Да - без этого никуда, это один из этапов тестирования, но сведущие "предприниматели" мало, что предпринимают по этому поводу, в основном из-за своего невежества, продолжают сливать бюджеты на рекламу, в надежде что всё изменится.

     

    Поэтому если описанный случай похож с вашим - у вас рекламный бюджет сливается как в "трубу" или у вас заходы с поисковых систем и мало заказов - что-то не так с вашим дизайном и/или у вас отсутствует уникальное предложение.

     

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

     

    Ориентировочно 2 недели до выкатывания рабочей версии магазина. Далее оптимизация - не пропусти. Подписывайся на мой канал, ставь лайки :)

  10. Привет читатель, если конечно кто-то вообще меня читает :ugeek:

    Очень часто встречаю эти вопросы, решил вставить сои 5 копеек.

    Эти два вопроса вызывают бомбежку пуканов на протяжении многих лет, но все сеошники "для отмазки" говорят некую усредненную цифру.

    Давайте разберемся, почему нельзя дать точный ответ на эти вопросы:

    1. Нужно понимать, а что вообще нужно от магазина, Вы собрались завоевать мир - одна цена "примерная", заработать на чебуреки с кокой - совершенно другая стоимость.

    2. СЕО и создание магазинов - это одна из областей маркетинга, не существует одного упоротого направления, которое однозначно даст результат. Весь интернет-маркетинг - постоянный поиск и эксперимент, и начинается он далеко не в интернете, приведу пример:

    Вы продаете чебуреки, Вам хочется быть на 1 месте, как думаете что нужно? (я уже знаю мысли в ваших головах: ССЫЛКИ, НУЖНО БОЛЬШЕ ССЫЛОК) - хрен вам :-D, ох я Ванга.

    Чтобы продавать чебуреки и быть на 1 месте нужно: качественное мясо, чеснок, кинза, соль, тесто.

    3. Вам магазин нужен или позиция (Ща навангую, сек "он втирает дичь, будут продажи, будет гелик, идиот какой-то") и опять овощей Вам:-D, продажи и позиции, совершенно разные вещи. Позиции увеличивают посещаемость, но не гарантируют продажи. 

    Нельзя просто так взять и сказать сколько стоит сео.

    latest?cb=20131113132747&path-prefix=ru

     

    Вот примерный расклад:

    Создание магазина от 5 000 до 500 000. (да, да есть такие цены)

    1 товар = 30 руб. (копирайт)

    А дальше.....

     

     

     

    • 0
      записей
    • 0
      комментариев
    • 252
      просмотра

    В блоге ещё нет записей

    • 0
      записей
    • 0
      комментариев
    • 96
      просмотров

    В блоге ещё нет записей

    • 0
      записей
    • 0
      комментариев
    • 39
      просмотров

    В блоге ещё нет записей

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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