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

Технические требования к публикуемым дополнениям


Recommended Posts

Вообще как по мне надо людей научить писать окмоды, что не надо привязываться к $data['heading_title'], index 4 , делать replace offset 48

 

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

  • +1 2
Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах


25 минут назад, esculapra сказал:

- это нормально,  а нам нельзя! - геноцид какой-то.

 

7 минут назад, chukcha сказал:

очень спорное требование

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

Надіслати
Поділитися на інших сайтах

3 минуты назад, spectre сказал:

по моей логике можно сделать в том же контроллере private функцию

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

 

 

Надіслати
Поділитися на інших сайтах

Логика "есть здесь до меня нагадили, то и мне можно" - это все что нужно знать о любителях "<b>" в контроллерах, потому что так удобней.

Но никто не задумывается, что будет завтра.

Надіслати
Поділитися на інших сайтах

О! А как насчет стандарта - не менять результаты работы системных библиотек с помощью кубленного кода?

 

К примеру, есть модуль, который меняет то, что уже было положено в setTitle()

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

Надіслати
Поділитися на інших сайтах

1 минуту назад, SergeTkach сказал:

О! А как насчет стандарта - не менять результаты работы системных библиотек с помощью кубленного кода?

 

К примеру, есть модуль, который меняет то, что уже было положено в setTitle()

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

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

Надіслати
Поділитися на інших сайтах

12 часов назад, spectre сказал:

Вообще как по мне надо людей научить писать окмоды, что не надо привязываться к $data['heading_title'], index 4 , делать replace offset 48

 

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

Я бы почитал тоже для общего развития, может что-то новое для себ почерпнул бы! Так что очень жду!

Надіслати
Поділитися на інших сайтах

13 часов назад, esculapra сказал:

Проверить профайлером (использование памяти, вемя выолнения)...

Я все же спросил о статистике, что мы приобретаем, нарушая стандарты

Надіслати
Поділитися на інших сайтах

11 часов назад, SergeTkach сказал:

О! А как насчет стандарта - не менять результаты работы системных библиотек с помощью кубленного кода?

 

К примеру, есть модуль, который меняет то, что уже было положено в setTitle()

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

Вообще да, вот тут вот согласен, вот в этом плане куб зло конечно. Библиотеки менять вообще не стоит те что из коробки, тем более еще и кубом закрывать. Лучше собственные писать.

  • +1 1
Надіслати
Поділитися на інших сайтах

Только что, matroskin92 сказал:

Я все же спросил о статистике, что мы приобретаем, нарушая стандарты

Да нет такой статистики и накладные расходы там если и есть - то копеечные (если только там подкапотка не изменена до неузнаваемости и не понавешано 100500 event'ов).

Надіслати
Поділитися на інших сайтах

3 минуты назад, OtezVikentiy сказал:

Я бы почитал тоже для общего развития, может что-то новое для себ почерпнул бы! Так что очень жду!

https://opencartforum.com/blogs/entry/401-kak-napisat-ocmod-modifikator-chtoby-on-dazhe-rabotal-i-nichego-ne-slomat/

  • +1 1
Надіслати
Поділитися на інших сайтах

4 минуты назад, OtezVikentiy сказал:

Да нет такой статистики и накладные расходы там если и есть - то копеечные (если только там подкапотка не изменена до неузнаваемости и не понавешано 100500 event'ов).

Вот именно такого ответа я и ожидал. 

Надіслати
Поділитися на інших сайтах

Еще отдельно для авторов шаблонов прям большая просьба в теплейте product.(tpl,twig) не убирать id="button-cart" с кнопки добавления товара в корзину
 

image.thumb.png.5eb56c37d7fc6e74bc257d1f7cd56a40.png

 

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

  • +1 1
Надіслати
Поділитися на інших сайтах

12 минут назад, spectre сказал:

Спасибо! Прикольная статья! Если бы попалась мне раньше и не пришлось бы ходить по собственным граблям - то была бы прям супер-полезной.

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

Надіслати
Поділитися на інших сайтах

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

  • +1 5
Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


18 часов назад, SergeTkach сказал:

А как насчет стандарта - не менять результаты работы системных библиотек с помощью кубленного кода?

 

К примеру, есть модуль, который меняет то, что уже было положено в setTitle()

думаю, можно дополнить - не только библиотеки и не только кубленным кодом. 
Например видел что через модификатор заменяют в стандартной модели товара getProduct на напр. getProduct_ и рядом создается свой собственный getProduct с каким-то своим набором аргументов и своим кодом.. понятно что все дополнения которые написаны под стандартный код перестают работать и приходится все переписывать под этот один модуль. И подобных примеров - множество. 
Вообще, в других движках ситуация, когда кто-то изменяет код движка приравнивается к смертному греху, вот для примера Drupal создаются целые мемы на эту темы, стикеры, наклейки, футболки итд. Потому что считается что это очень-очень плохо.  И не зря считается.
 

Спойлер

3212038247_a74dcaf9ef_z.jpg.ebb64ed30aa8baa7e406205382e74a77.jpg


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

  • +1 1
Надіслати
Поділитися на інших сайтах

1 час назад, sv2109 сказал:

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

События, прокси, monkey patching, func_get_args ...

Надіслати
Поділитися на інших сайтах

  • 4 weeks later...
В 17.05.2021 в 21:39, spectre сказал:

Вообще как по мне надо людей научить писать

Я работал в газете в свое время, и всегда избегал такого оборота речи. "научить писать"... научить ваять код  / создавать код / написать код - реально меня коробит "писать"

Надіслати
Поділитися на інших сайтах

А как вы относитесь к неявной адресации? Например

   if(isset($this->request->post['task'])&&!empty($this->request->post['task']))

     $function=$this->request->post['task'];
   elseif(isset($this->request->get['task']))

     $function=$this->request->get['task'];

   if(isset($function))
    {

     $this->$function();
    }

Сама функция может быть в протекте или в привате.

Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах

Вот моя конструкция для примера (не Опенкарт)

   public static function _FUN ($type,$fn,$options=null)
     {
       $function=$type.$fn;
        return self::$function($options);
     }

 

       ModelSupertoolsOseAhBase::_FUN('save','Configuration'); // все запросы идут на паблик функцию

 

И подключается искомая функция

 

protected static function saveConfiguration()
 

Надіслати
Поділитися на інших сайтах

47 минут назад, esculapra сказал:

А как вы относитесь к неявной адресации? Например

   if(isset($this->request->post['task'])&&!empty($this->request->post['task']))

     $function=$this->request->post['task'];
   elseif(isset($this->request->get['task']))

     $function=$this->request->get['task'];

   if(isset($function))
    {

     $this->$function();
    }

Сама функция может быть в протекте или в привате.

 

Функцию делают для того не public, чтобы не вызвали из вне. А если хотите вызвать приватную функцию, тогда и не нужно её делать приватной.

 

В итоге не вижу разницы, что так вызывать "mymodule/save", что так "mymodule?task=save" главное, чтобы функция сама не была дырявой. И думаю в вашем способе должна быть валидация на существующие названия $function = (in_array($this->request->get['task'], array('save', 'delete')) ? $this->request->get['task'] : 'index').

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

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