Дополнительные примечания

В Ubilling начиная со стабильного релиза 0.6.1 появилась возможность использовать в модулях общую реализацию дополнительных комментариев.
С точки зрения юзабилити, это по должно выглядеть как… грубо форум с разделами, являющимися по своей сути представлениями сущностей биллинга, и топиками привязанными к конкретным объектам в рамках этих сущностей.
С точки зрения интеграции в какой-то абстрактный модуль, работающий с какими-то абстрактными объектами, все максимально просто:

 //Возможно кому-то не хочется использовать всю эту радость,
 //поэтому включена ли соответствующая опция в конфиге alter.ini
        $altCfg=$ubillingConfig->getAlter();
        if ($altCfg['ADCOMMENTS_ENABLED']) {
            //в конструкторе класса передаем название сущности/модуля(scope), с которыми связаны конкретные объекты
            $adcomments=new ADcomments('ABSTRACTMODULE');
            //вываливаем в вывод рендер существующих/потенциальных комментов для конкретного объекта (item) связанного с нашей сущностью
            show_window(__('Additional comments'), $adcomments->renderComments($itemId));
        }

В результате получаем нечто типа такого:

Все формочки для создания,редактирования,удаления примечаний - полностью самодостаточны, и присутствуют в возвращаемом методом renderComments() результате. Итого, в сухом остатке - две строчки. Создали объект класса ADcomments + показали ему, для кого хотим комментарии. Куда проще?

А что если мы хотим предварительно показать для каких объектов в списке, уже есть существующие дополнительные примечания, но не хотим дергать базу по этому поводу каждый раз? А все так же очень просто. Для этого в ADcomments начиная с Ubilling 0.6.2 появились несколько прубличных метододов: haveComments (возвращает bool) и getCommentsIndicator (возвращает string) а также getCommentsCount (int). Параметром для них передается конкретный item в ранее инициализированном конструктором scope. Относительно нашего предыдущего абстрактного примера это должно выглядеть как-то так:

//допустим, что все объекты нашего абстрактного модуля лежат в массиве $all вида $itemId=>$itemData
 
        $altCfg=$ubillingConfig->getAlter();
        if ($altCfg['ADCOMMENTS_ENABLED']) {
            // Один раз создали объект. Забыли.
            $adcomments=new ADcomments('ABSTRACTMODULE');
        }
 
        if (!empty($all)) {
         // перебираем айтемы поштучно
          foreach ($all as $id=>$data) {
          //не забываем проверять, включена ли фича, и соответственно есть ли у кого спрашивать.
           if ($altCfg['ADCOMMENTS_ENABLED']) {
             //получаем иконку дополнительных комментариев если они присутствуют для него. Вторым параметром можно передать размер.
             $indicatorIcon=$adcomments->getCommentsIndicator($id);
 
             //ну и если хотим какой-то флаг поднять - вот вам булевое значение
             $adcommentsFlag=$adcomments->haveComments($id);
 
             //также можем отдельно получить количество комментариев для айтема. Да 0 - если нету.
             $adcommentsFlag=$adcomments->getCommentsCount($id);
             }
          } 
        }
adcomments.txt · Последние изменения: 2015/01/22 16:54 — nightfly
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki