Konorws (Разработка и модификация Opencart) https://opencart-forum.ru/blogs/2-konorws-razrabotka-i-modifikaciya-opencart/ruRedirect с POST данными https://opencart-forum.ru/blogs/entry/158-redirect-s-post-dannymi/ Всем привет. Это бугде короткая запись но очень полезная.
Тема данной публикации: Как сгделать 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 это может пригодится когда вам нужно перенаправить данные с формы на другой обрилитлик или же назад на форму.

]]>
158Fri, 21 Dec 2018 11:48:52 +0000
Взгляд на Opencart после Magento и других продвинутых систем https://opencart-forum.ru/blogs/entry/83-vzglyad-na-opencart-posle-magento-i-drugih-prodvinutyh-sistem/ Добрый гдень.

Немного истории вот ггде то года три назад я начал свой путь в рилите с 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% задач что сивлятса к кодингу доходит редко и економит просто уйму времени. С версткой аналогично создаеш блок и подтягиваеш в нужное место и живеш и радуешся жизни.

 

Ну думал написать по потому чтольше но с временем не сложилось. Может потом добавлю что то.


 

]]>
83Wed, 07 Mar 2018 17:03:58 +0000
Разница между redirect 301 и 302 о которой возможно вы не знаете https://opencart-forum.ru/blogs/entry/38-raznica-mezhdu-redirect-301-i-302-o-kotoroy-vozmozhno-vy-ne-znaete/ Добрый гдень. 

Вот не ик давно столкнулся с одной фичей 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 по умолчанию.

]]>
38Thu, 19 Oct 2017 11:57:34 +0000
Мульти добавление изображений к товару https://opencart-forum.ru/blogs/entry/26-multi-dobavlenie-izobrazheniy-k-tovaru/ Добрый гдень. Вот гделал непотому чтольшую задачу основной этолью которой было ускорить и упростить наполнения товаров. 

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

Суть в том что загрузка и добавление происходит в 2 клика. Причем картинки сортируются в свои каилоги примером вот ик 
/image/data/lproducts/55
ггде 55 это ID товара если же вы создаете новый товар и у него еещё нет Айдишки тогда бугдет создан каилог по времени time();

Вот вигдео как рилииет:

 

Если кому нужно пишите в комених дам исходники. Тут канешно для Opencart 1.5 то если руки ровные тогда без проблем можно посивить и на 2.Х

Ггдето вигдел даже готовый плагин для этот этоли правда он у меня не хотел рилиить!

]]>
26Fri, 10 Mar 2017 14:13:16 +0000
Модуль Истории изменений (Change History) https://opencart-forum.ru/blogs/entry/17-modul-istorii-izmeneniy-change-history/ Добрый гдень хочу предсивить вам непотому чтольшой обзор модуля который почти завершен и находится на эипе тестирования.
"Change History" Предсивляет из себя модуль который сохраняет потому чтольшенство изменений которые проходят в админ панели.
В обещём мы имеем несколько параметров:

  1.  Действие: 
    - Добавление
    - Удноние
    - Изменение
    При использовании первых двоих вы полулите отчет о том что было удноно + некоторые дополнительные данные икие как ID
    При "изменении" вы получаете отчет о том какие параметры были изменены в иком варианте (Поле: было -> сило
  2. дальше у нас есть Модули (Название (Подгдерживаемые гдействия)
    -  Заказ (Удноние, добавление)
    -  Ситусы заказа (изменение)
    - Товары (добавление, изменение, удноние)
    - Категории (добавление, изменение, удноние)
    - Покупатели (добавление, изменение, удноние)
     

В отчете вы получаете икие поля
№ отчеи / Имя Юзера / Модуль / Действие / дополнительные прамметры / даи
Даже есть фильтр который позволяет отсортировать отчеты
 

Настройка

Вы можете вклюлить или отклюлить те модули которые хотите отслежывать (смт. Скрин)

 

Даже в проэтоссе проектирования функция Recovery которая бугдет в будуещём добавлена к функционалу данного модуля
Жду ваших комменириев и пожеланий

]]>
17Thu, 23 Feb 2017 09:59:00 +0000
Заблуждение о "Безлимитно Сайтов" https://opencart-forum.ru/blogs/entry/11-zabluzhdenie-o-bezlimitno-saytov/ Добрый гдень. Хочу вам рассказать том что вы получаете когда выбираете хостинг на котором вам разрешают усинавливать несколько сайтов а в некоторых случаях и неограниченное когдачество сайтов.
Начну с того что сам повелся на икую акцию. Мы купили хостинг с икими характеристиками:
ЖД SSD – НЕ ОГРАНИЧЕНО,
Количество сайтов – НЕ ОГРАНИЧЕНО,
ОЗУ: 1 GB,
Цена сосивила 330грн/мес. (730р/мес.)
Ну как для одного не потому чтольшого интернет магазина с 1к трафика в гдень и 3к товарами должно было хватить тем потому чтолее меня уверяли что все бугдет рилиить отлично.
Скажу сразу что я очень лояльно сивлюсь к данному хостингу («Unihost»  рефф. Силка) и не хочу показать какое то негативное мнение насчет него я активно пользуюсь его услугами и икие ситуации встречал и на других хостингах.
Ну казалось все хорошо рилиило и не было никаких проблем.
Но тут мы начали гделать еещё один проект и когда сил вопрос о том ггде его разместить мы вспомнили о том что у нас есть хостинге ггде можно посивить еещё файлы ик как диск был неограничен проблем не должно было быть но когда мы развернули проект через месяц мы заметили что оба сайи начали подвисать и тогда мы начали искать прилину этого и добрались к логам производительности и оказалось что нам просто не хваиет ресурсов  после обещёние с тех. подгдержкой о казалось что у всех сайтов одни ресурсы то есть наш 1 ГБ ОЗУ был на два сайи.

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

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

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

]]>
11Sun, 19 Feb 2017 14:57:30 +0000