Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


Recommended Posts

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

 

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

  • +1 2
Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

 

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

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

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

Link to post
Share on other sites
3 минуты назад, spectre сказал:

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

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

 

 

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

 

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

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

Link to post
Share on other sites
1 минуту назад, SergeTkach сказал:

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

 

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

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

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

Link to post
Share on other sites
12 часов назад, spectre сказал:

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

 

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

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

Link to post
Share on other sites
13 часов назад, esculapra сказал:

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

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

Link to post
Share on other sites
11 часов назад, SergeTkach сказал:

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

 

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

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

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

  • +1 1
Link to post
Share on other sites
Только что, matroskin92 сказал:

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

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

Link to post
Share on other sites
3 минуты назад, OtezVikentiy сказал:

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

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

  • +1 1
Link to post
Share on other sites
4 минуты назад, OtezVikentiy сказал:

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

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

Link to post
Share on other sites

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

image.thumb.png.5eb56c37d7fc6e74bc257d1f7cd56a40.png

 

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

  • +1 1
Link to post
Share on other sites
12 минут назад, spectre сказал:

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

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

Link to post
Share on other sites

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

  • +1 5
Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

 

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

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

Спойлер

3212038247_a74dcaf9ef_z.jpg.ebb64ed30aa8baa7e406205382e74a77.jpg


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

  • +1 1
Link to post
Share on other sites
1 час назад, sv2109 сказал:

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

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

Link to post
Share on other sites
  • 4 weeks later...

Предлагаю обязать установку  rel="noreferrer noopener" на ссылки идущие во вне.

Link to post
Share on other sites
В 17.05.2021 в 21:39, spectre сказал:

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

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

Link to post
Share on other sites

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

   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();
    }

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

 

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

 

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

 

protected static function saveConfiguration()
 

Link to post
Share on other sites
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').

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.