Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

konorws

Користувачі
  • Публікації

    507
  • З нами

  • Відвідування

Записи блогу, опубліковані користувачем konorws

  1. konorws
    Добрый день.
    Немного истории вот где то года три назад я начал свой путь в работе с Opencart. Скажем так полюбил я Opencart всем сердцем.
    Но в один солнечный день мне пришел лист о том что я прошел собеседование в относительно большую IT кампанию. И с того дня мой взгляд на хороший код изменился... 
    Вот не так давно меня попросили немного доработать функционал на OC. Мне не сложно в принципе вот я и приступил к работе. Я сидел и говорил себе Боже как я раньше с этим работал.
     
    Ну теперь давайте я вам попробую описать то что меня возмутило.
     
    1. Удобство разработки и интеграция в IDE
    Да когда я работал с Sublime Text все было вроде гуд. Но уже полгода работаю через PhpStorm (PS. Лицензия есть даже на домашнем ПК а не только на работе).
    При запуске сразу получаем кучу предупреждений. Давайте взглянем на простой класс http://joxi.ru/52alLM0UGzO1Om
    Причин тут две:
    1) Отсутствие PhpDoc
    2) Упрощенная структура самой CMS
    Ну если добавить PHPDoc то большую часть проблем это реши. 
    Зачем нужен PHPDoc ??
    Я напишу коротко если будет интересно загуглите.
    1) Это читабельность кода
    2) Автокомплит и информация о методах на лету  http://joxi.ru/brRZkROHQveeLr как не крути сразу видно что и как надо передавать тому или другому методу или то что он возвращает. Или же увидеть ошибку на моменте написания кода а не запуска.
     
    2) Это наверное бесит меня на данный момент больше всего. Это дублирования кода.
    Хотя Опенкарт и как бы MVC но он нарушает один из принципов MVC потому что с дублирование кода тут просто беда.
    Давайте посмотрим на один из контроллеров админ панели. http://joxi.ru/nAyKdw3tXz1oVm 
    И это один из множества примеров. который есть в каждом файле я молчу о генерации $url вот пример из файла файла покупателя. Этот кусок кода встереатся в одном файле 9 раз. ????? 
    Давайте посчитаем: 9 * ~40 строк = ~360 строчек кода которые можно отрефакторить к 20 максимум и будет один метод для всех файлах а в контролере это будет одна строка вместо 40  
    $url = ''; if (isset($this->request->get['filter_name'])) { $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); } if (isset($this->request->get['filter_email'])) { $url .= '&filter_email=' . urlencode(html_entity_decode($this->request->get['filter_email'], ENT_QUOTES, 'UTF-8')); } if (isset($this->request->get['filter_customer_group_id'])) { $url .= '&filter_customer_group_id=' . $this->request->get['filter_customer_group_id']; } if (isset($this->request->get['filter_status'])) { $url .= '&filter_status=' . $this->request->get['filter_status']; } if (isset($this->request->get['filter_approved'])) { $url .= '&filter_approved=' . $this->request->get['filter_approved']; } if (isset($this->request->get['filter_ip'])) { $url .= '&filter_ip=' . $this->request->get['filter_ip']; } if (isset($this->request->get['filter_date_added'])) { $url .= '&filter_date_added=' . $this->request->get['filter_date_added']; } if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } А теперь представте волшебство Если бы можна было бы так
    $url = $this->url->saveUrlParametrs('filter_name', 'filter_email', 'filter_customer_group_id'); И подобных ситуаций уйма. Про дублирование верстки я молчу вообще. Чтоб добавить чтото к товару нада єто продлублировать в 100500 файлах.
    В мадженте к примеру страница редактирования или список в админке создается с помощью двох XML файлов где просто описиваются конфигурации и єтими конфигами можна решить около 75% задач что ставлятса к кодингу доходит редко и економит просто уйму времени. С версткой аналогично создаеш блок и подтягиваеш в нужное место и живеш и радуешся жизни.
     
    Ну думал написать по больше но с временем не сложилось. Может потом добавлю что то.

     
  2. 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 это может пригодится когда вам нужно перенаправить данные с формы на другой обработчик или же назад на форму.
  3. konorws
    Добрый день. Хочу вам рассказать том что вы получаете когда выбираете хостинг на котором вам разрешают устанавливать несколько сайтов а в некоторых случаях и неограниченное количество сайтов.
    Начну с того что сам повелся на такую акцию. Мы купили хостинг с такими характеристиками:
    ЖД SSD – НЕ ОГРАНИЧЕНО,
    Количество сайтов – НЕ ОГРАНИЧЕНО,
    ОЗУ: 1 GB,
    Цена составила 330грн/мес. (730р/мес.)
    Ну как для одного не большого интернет магазина с 1к трафика в день и 3к товарами должно было хватить тем более меня уверяли что все будет работать отлично.
    Скажу сразу что я очень лояльно ставлюсь к данному хостингу («Unihost»  рефф. Силка) и не хочу показать какое то негативное мнение насчет него я активно пользуюсь его услугами и такие ситуации встречал и на других хостингах.
    Ну казалось все хорошо работало и не было никаких проблем.
    Но тут мы начали делать еще один проект и когда стал вопрос о том где его разместить мы вспомнили о том что у нас есть хостинге где можно поставить еще файлы так как диск был неограничен проблем не должно было быть но когда мы развернули проект через месяц мы заметили что оба сайта начали подвисать и тогда мы начали искать причину этого и добрались к логам производительности и оказалось что нам просто не хватает ресурсов  после общение с тех. поддержкой о казалось что у всех сайтов одни ресурсы то есть наш 1 ГБ ОЗУ был на два сайта.

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

    И старайтесь не экономить при выборе хостинга или сервера это та часть где лучше заплатить больше если вы хотите создать не сайт визитку.

    Просто помните в большинстве случаев вы получаете общие ресурсы на все сайты хоть их там 5, 10 или 100.  
     

  4. konorws
    Добрый день хочу представить вам небольшой обзор модуля который почти завершен и находится на этапе тестирования.
    "Change History" Представляет из себя модуль который сохраняет большенство изменений которые проходят в админ панели.
    В общем мы имеем несколько параметров:
     Действие: 
    - Добавление
    - Удаление
    - Изменение
    При использовании первых двоих вы получите отчет о том что было удалено + некоторые дополнительные данные такие как ID
    При "изменении" вы получаете отчет о том какие параметры были изменены в таком варианте (Поле: было -> стало)  дальше у нас есть Модули (Название (Поддерживаемые действия)
    -  Заказ (Удаление, добавление)
    -  Статусы заказа (изменение)
    - Товары (добавление, изменение, удаление)
    - Категории (добавление, изменение, удаление)
    - Покупатели (добавление, изменение, удаление)
      В отчете вы получаете такие поля
    № отчета / Имя Юзера / Модуль / Действие / дополнительные прамметры / дата
    Также есть фильтр который позволяет отсортировать отчеты
     
    Настройка
    Вы можете включить или отключить те модули которые хотите отслежывать (смт. Скрин)
     
    Также в процессе проектирования функция Recovery которая будет в будущем добавлена к функционалу данного модуля
    Жду ваших комментариев и пожеланий

  5. konorws
    Добрый день. 
    Вот не так давно столкнулся с одной фичей 301 редиректа если честно я несколько часов не мог понять в чем прикол а потом все добрый дядя Google дал мне ответ.
     
    С чего все началось.
    Ко мне написал старый заказчик с просьбой поправить страницу заказа. А именно перекидать пользователя без авторизации на страницу самой авторизации (зачем ? это уже другая история скажу сразу у него движок не Opencart а самопис какой то). 
    Тут долго думать не пришлось 3 строчки кода (Буду приводить код Opencart что бы было более понятно)
    Ну вставил я этот код:
    if(!$this->customer->isLogged()){ $this->response->redirect($this->url->link('account/login')); } Ну думаю проверю на всякий случай. И вот скидаю куки и захожу на страницу заказа оп и все работает.)))) Думаю ладно попробую еще авторизацию пройти. 
    Логинюсь на сайте - идем на страницу оформления - оп и я на странице авторизации с ошибкой доступа
     
    Я немножко афигел.  Давай копать проврил код все нормально все верно. Убрал код из файла и оп ляля а Ридерект остался причем в любой ситуации перекидивает. 
    Я начал колдовать искал убирал скидивал кеш и нифига.  
    И тут я заглянул в файл редиректа и вот какую строчку я там обнаружил
    header("HTTP/1.1 301 Moved Permanently"); Уточнил у заказчика откуда он там взялся (пришлось обяснить сначала что он значит и делает). Как оказалось им какая то СЕО прога сказала что на сайте есть 302 редиректы и это не правильно и они решили все перевести в 301.
    Думаю окей ваши тараканы.  
     
    Закомментил эту строчку проблема осталась. 
     
    Начал гуглить, гуглить, гуглить, ...........
    И на дном из тикетов поддержки Google Chrome я нашел ОТВЕТ:
    Как оказалось браузеры кешируют 301 редирект и при повторном вызове УРЛ сразуже перенаправлять на кешированный УРЛ. 
    Причем не только Google Chrome а и другие браузеры также.
     
    Итоги:
    Для внутришних редеректов сайта всегда используйте 302 редирект который используется в PHP по умолчанию.
  6. konorws
    Добрый день. Вот делал небольшую задачу основной целью которой было ускорить и упростить наполнения товаров. 
    Одно из самых раздражающих есть добавление изображений поэтому я добавил небольшой скрипт основан на скрипте uploadify 
    Суть в том что загрузка и добавление происходит в 2 клика. Причем картинки сортируются в свои каталоги примером вот так 
    /image/data/lproducts/55
    где 55 это ID товара если же вы создаете новый товар и у него еще нет Айдишки тогда будет создан каталог по времени time();
    Вот видео как работает:
     
    Если кому нужно пишите в коментах дам исходники. Тут канешно для Opencart 1.5 то если руки ровные тогда без проблем можно поставить и на 2.Х
    Гдето видел даже готовый плагин для этой цели правда он у меня не хотел работать!
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.