Переезд на OkayCMS - организация redirect 301

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #21 zyxer » 28.11.2019, 18:14

Сейчас модуль все делает сам (и таблицу создает). Если хочеться обсудить это решение с точки зрения "как это делать", давайте тогда обсудим в теме viewtopic.php?f=9&t=1508, я думаю там будет уместно.

Добавлено спустя 2 минуты 29 секунд:
Чтобы пользоваться этим, нужно загрузить содержимое архива в Okay/Modules и в админке в разделе модулей нажать "установить"
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #22 korshunov » 29.11.2019, 07:18

Пытаюсь этим пользоваться. Работает.
Еще пытаюсь понять, что совсем нелегко.

В файле FrontExtender.php заменяю фунцию на

Код: Выделить всё

    public function redirect()
    {
ini_set("display_errors", 1);
error_reporting(-1);

        /** @var RedirectsEntity $redirectEntity */
        $redirectEntity = $this->entityFactory->get(RedirectsEntity::class);

print_r($redirectEntity);
exit;


        if (($currentUrl = $this->request->getPageUrl()) && ($redirect = $redirectEntity->get((string)$currentUrl))) {
            Response::redirectTo($this->request->getBasePathWithDomain() . $redirect->destination, 301);
        }
    }

чтобы вывести промежуточную переменную. Вроде действие безобидное, но получаю лишь ошибку
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 67112960 bytes) in D:\xampp\htdocs\OkayCMS330\Okay\Modules\OkayCMS\Redirect\Extenders\FrontExtender.php on line 33

Строка 33 - это print_r($redirectEntity);

Как отлаживать в такой ситуации?

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #23 zyxer » 29.11.2019, 08:39

Вы пытаетесь принтерить большой объект. Так делать не стоит ) Там лежит объект класса RedirectsEntity.
Все классы Entity реализовывают интерфейс Okay\Core\Entity\EntityInterface и базовая реализация класса RedirectsEntity лежит в Okay\Core\Entity\Entity (там он немного раскидан по трейтам, но CRUD лежит в трейте CRUD).

В RedirectsEntity класс, аналогичный старым api/Products, api/Brands... Вы же никогда не принтерили $this->products или $this->brands (прям полностью классы).
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #24 korshunov » 29.11.2019, 09:26

О чем-то таком я догадывался.
Но почему объект для простенькой сущности столь большой? Это ж явно нерационально...

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

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #25 makki » 29.11.2019, 09:29

korshunov писал(а):И опять, как отлаживать? Глазами просматривать массу классы-объекты в сложной иерархии, когда нельзя получить простую распечатку - это ж несерьезно...
Отлаживать дебаггером. Распечатка - это ж несерьезно...
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #26 zyxer » 29.11.2019, 09:50

И опять, как отлаживать? Глазами просматривать массу классов-объектов в сложной иерархии, чтобы определять, когда можно запрашивать простую распечатку, а когда нельзя - это ж несерьезно...
Простите конечно, но не серьёзно принтерить объекты )) Для этого, если уже нужно посмотреть на внутрянку, есть спец. средства типа xdebug.
А что вы хотите отлаживать? давайте попробуем на примере разобрать.

Сам объект для сущности не большой, но у него есть зависимости, которые прокидывает контейнер, и для всех сущностей это один и тот же экземпляр класса. И проблема в принтере не в том, что объект большой, а сам принтер довольно ресурсоёмкий. Попробуйте даже отпринтерить массив категорий, когда их 50+. Страница уже будет подтупливать.
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

Teplogaz
Teplogaz
Репутация: 2
Сообщения: 23
Зарегистрирован: 27.11.2017
С нами: 6 лет 3 месяца

Сообщение #27 Teplogaz » 29.11.2019, 12:51

zyxer писал(а):Сейчас модуль все делает сам (и таблицу создает). Если хочеться обсудить это решение с точки зрения "как это делать", давайте тогда обсудим в теме viewtopic.php?f=9&t=1508, я думаю там будет уместно.


Чтобы пользоваться этим, нужно загрузить содержимое архива в Okay/Modules и в админке в разделе модулей нажать "установить"

Когда делаю такие действия, нажимаю установить сайт не доступен

Страница недоступна
Сайт ...................com.ua пока не может обработать этот запрос.

HTTP ERROR 500

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #28 zyxer » 29.11.2019, 13:02

что показывает если включить вывод ошибок? в config/config.php debug_mode = true

Добавлено спустя 2 минуты 37 секунд:
у вас структура файлов модуля так выглядит http://prntscr.com/q3uhxw?
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

Teplogaz
Teplogaz
Репутация: 2
Сообщения: 23
Зарегистрирован: 27.11.2017
С нами: 6 лет 3 месяца

Сообщение #29 Teplogaz » 29.11.2019, 13:11

Да такая структура
востановить получилось только бекапом БД и самого сайта

У меня версия v.3.0.4 может с этим связано?

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #30 zyxer » 29.11.2019, 13:12

ну это лишнее, можно в базе из таблицы ok_modules удалить этот модуль

Добавлено спустя 10 минут 44 секунды:
да, модуль будет работать минимум на 3.1.0, но разрабатывался на 3.3.0
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #31 korshunov » 29.11.2019, 18:34

makki писал(а):Отлаживать дебаггером. Распечатка - это ж несерьезно...

zyxer писал(а):Простите конечно, но не серьёзно принтерить объекты )) Для этого, если уже нужно посмотреть на внутрянку, есть спец. средства типа xdebug.

Ребята, не надо навязывать другим свои предпочтения. На вкус и цвет товарища нет.

Например, если у меня стоит небольшая задача, когда заказчик просит что-то немного поправить, мне совсем не с руки на чужом хостинге устанавливать добавочное ПО. Это как из пушки по воробьям...

И вообще, разработчиками массового продукта надо бы иметь кругозор пошире...

zyxer писал(а):Сам объект для сущности не большой, но у него есть зависимости, которые прокидывает контейнер, и для всех сущностей это один и тот же экземпляр класса. И проблема в принтере не в том, что объект большой, а сам принтер довольно ресурсоёмкий. Попробуйте даже отпринтерить массив категорий, когда их 50+. Страница уже будет подтупливать.

Мне приходилось многократно выводить полный массив категорий даже когда их 200+. И куда проще подождать 4-5 сек, чем устанавливать xdebug.

И непонятно, почему нельзя вывести сам объект, если он небольшой. Или хотите сказать, что он небольшой "САМ", но с навешанными Вами зависимостями он уже становится большим? Если так, то я думаю, что это недостаток разработки...

Про то, как обстоит дело с использование памяти в разрабатываемой Вами CMS, я уже писал
viewtopic.php?f=5&t=1318&p=6909#p6909
Вы по существу ответить пока не пожелали...

Считаете нормальным, что объект для малюсенькой сущности у Вас обвешан громадными объемами информации - дело Ваше...

Добавлено спустя 13 часов 28 минут:
Для сравнения. В Core/Cart.php прекрасно работает распечатка
print_r($cart);
в случае, когда в корзине сотня разных товаров и сама распечатка содержит 2М.

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

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #32 zyxer » 30.11.2019, 09:03

Простите, не сдержался))
Изображение

Корзина и класс Entity это разные вещи. Не нужно печатать Entity там нечего смотреть.
Вы смотрели сам класс нужного вам Entity? Что в итоге вы ожидаете увидеть в распечатке?
Сам объект не большой, но у него есть зависимости, которые лежат в свойствах этого объекта, у них есть свои зависимости... Так вот print_r идёт по этим объектам рекурсивно, и у него кончается память. ЭТО НОРМАЛЬНО, НЕ НОРМАЛЬНО ЕГО ВООБЩЕ ПЕЧАТАТЬ.

По поводу памяти, включите opcache и потребление упадёт до 50%.
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

Teplogaz
Teplogaz
Репутация: 2
Сообщения: 23
Зарегистрирован: 27.11.2017
С нами: 6 лет 3 месяца

Сообщение #33 Teplogaz » 30.11.2019, 09:13

Может кому нужно будет, после того как установили модуль
https://forum.okay-cms.com/download/file.php?id=517&filename=Redirects_for_OkayCMS_3.zip
SQL запрос, добавлять можно списком
вставляем относительные ссылки без слеша

INSERT INTO `ok_okaycms__redirects` (`id`, `source`, `destination`) VALUES (NULL, 'старая ссылка', 'новая ссылка');

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #34 korshunov » 30.11.2019, 09:31

zyxer писал(а):Корзина и класс Entity это разные вещи. Не нужно печатать Entity там нечего смотреть.

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

zyxer писал(а):Сам объект не большой, но у него есть зависимости, которые лежат в свойствах этого объекта, у них есть свои зависимости... Так вот print_r идёт по этим объектам рекурсивно, и у него кончается память.

И как посмотреть все эти свойства и зависимости?

zyxer писал(а):Вы смотрели сам класс нужного вам Entity? Что в итоге вы ожидаете увидеть в распечатке?

В документации
http://www.php.su/print_r
сказано "print_r - печатает читабельную информацию о переменной".

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

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #35 korshunov » 06.12.2019, 09:28

zyxer писал(а):По поводу памяти, включите opcache и потребление упадёт до 50%.

Интересно Ваше отношение к замечаниям по потреблению памяти.
1. На стр
viewtopic.php?f=5&t=1318&p=6909#p6909
приведен конкретный пример, когда потребление памяти в версии 3 по сравнению с версией 2 выросло в 4-5 раз.
2. Сначала более месяца Вы это замечание полностью игнорируете.
3. Затем после напоминания эдак небрежно заявляете "включите opcache и потребление упадёт до 50%".
4. Сам по себе совет не слишком хорош - надо бы делать CMS оптимальным образом СРАЗУ. А пока выходит - одно чиним, другое ломаем.
5. Но даже если этому совету последовать, то простой расчет на уровне первоклассника показывает, что в таком случае в приведенном примере потребление памяти в версии 3 с "включите opcache" по сравнению с версией 2 без "включите opcache" будет выше в 2 раза - это ж ни в какие ворота...
6. Вспоминается фраза из фильма "— Я верю, что Ваш гений... — Компенсирует Вашу нерасторопность?"
Простите, не сдержался...

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #36 zyxer » 06.12.2019, 10:14

Но даже если этому совету последовать, то простой расчет на уровне первоклассника показывает, что в таком случае в приведенном примере потребление памяти в версии 3 с "включите opcache" по сравнению с версией 2 без "включите opcache" будет выше в 2 раза - это ж ни в какие ворота...
Так тройка на ООП написана... В таком случае память полюбому потребляется. По этому и был придуман механизм Opcache, который я и вам рекомендую включить.
Действительно, вы правы, что программы 2000+ годов потребляли килобайты памяти, программы 2019 года могут потреблять гигабайты. Такова тенденция развития...

Узкие места, мы и так оптимизируем, но в целом сделать чтобы он потреблял пару килобай памяти, практически не возможно, та и зачем, вы хотите окай на микроволновке запускать?

Добавлено спустя 1 минуту 32 секунды:
а уменьшить потребление памяти можно либо исправлением узких мест (которые исправляются) или в ущерб функциональности/гибкости/поддерживаемости кода

Добавлено спустя 39 минут 59 секунд:
хочу еще добавить, окай это open source проект. Вы можете тоже внести свои идеи в развитие. Только напишите что именно вы предлагаете, и как это реализовывается (я имею ввиду для экономии памяти).
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #37 korshunov » 06.12.2019, 11:24

zyxer писал(а):Действительно, вы правы, что программы 2000+ годов потребляли килобайты памяти, программы 2019 года могут потреблять гигабайты. Такова тенденция развития...

Опять Вы общие фразы пишете. Я сравниваю Okay2 и Okay3 - продукты довольно свежие, и программы 2000+ годов тут совсем ни при чем.

zyxer писал(а):Узкие места, мы и так оптимизируем, но в целом сделать чтобы он потреблял пару килобай памяти, практически не возможно, та и зачем, вы хотите окай на микроволновке запускать?

Опять передергиваете. Речь не про пару килобайт, а про то, что в конкретном месте Okay3 требует памяти в 4 (!) раза больше, чем Okay2.
Если можете, проанализируйте это конкретное место и скажите, почему и за счет чего так. Это будет ответ конкретный, а не в общем. Может, из анализа и ясно станет, как поправить...

zyxer писал(а):а уменьшить потребление памяти можно либо исправлением узких мест (которые исправляются) или в ущерб функциональности/гибкости/поддерживаемости кода

Вот на первый вариант я и намекаю...

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

Вот я и вношу. Если предыдущие намеки непонятны, то разъясню ТОЧНО: ожидается от Вас анализ конкретной ситуации с выводами по поводу столь большого требуемого объема памяти.
Именно от Вас, ибо лучше Вас систему никто не знает.
Я время от времени пытаюсь сам разобраться, но жутко сложно. А документации - почти ноль.

И опять-таки по поводу моих неоднократных предложений по поводу документации - завтраками кормите много месяцев...

Еще один вопрос время от времени всплывает - нерациональная работа с категориями:
viewtopic.php?p=4582#p4582
поддержка заявила "но если предложите лучше - мы это рассмотрим". Тут же было предложен вариант, на который оная поддержка просто никак не среагировала. Это за почти полтора года..

В теории все у Вас идеально, а на практике - далеко не всегда даже ответа дождешься...

dabustard
dabustard
Репутация: 4
Сообщения: 62
Зарегистрирован: 26.01.2018
С нами: 6 лет 1 месяц

Сообщение #38 dabustard » 01.06.2022, 12:01

zyxer писал(а):Тестами не прогонял по всем кейсам, но вроде работает. После установки нужно в БД в таблице ok_okaycms__redirects создавать записи. В source пишем откуда, в destination пишем куда. Так же не сложно докрутить, чтобы в админке был удобный интерфейс управления этим.


Забыл сказать, и в source и в destination пишем относительные ссылки без слеша пример: http://prntscr.com/q3dpuv

Этот модуль актуален для версий 4+ ?


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Полезные решения для OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей