Импорт данных в базу из GET запроса с проверкой условий

#
Re: Импорт данных в базу из GET запроса с проверкой условий
HostCMS, перенос ТДС руками плохая идея, сделал программно в функции install() с помощью копирования содержимого подготовленного файла в ТДС с последующим сохранением. Разобрался так-же созданием форм, сделал установку и удаление с модуле. А так-же подгрузку id формы для контроллера edit.php из файла конфигурации модуля. Теперь задача создать контроллер show.php, в документации нет внятного описания принципов его создания, добавите раздел документации, пожалуйста. Вчера пытался сделать по аналогичным контроллерам из informationsystem и structure - не сразу получается, разбираюсь, но за документацию был бы очень признателен.
Иерархия модуля:
- Каналы данных
-- Поля данных
--- Значения данных
Касательно создания контроллера show.php, интересуют способы создания методов:
1. Максмального/минимального/среднего значения данных (уровня 3)
2. Выборки данных за период (по значению дата из уровня 3)
3. Ограничение на выборку из поля данных (ограничение по ид уровня 2)

пока это основные задачи. Импорт, разработанный ранее - уже запущен и работает корректно.
Модератор
#
Re: Импорт данных в базу из GET запроса с проверкой условий
danila-sava,
контроллеры показа зависят от того, что вы будете показывать, какие опции принимать. У вас судя по описанию достаточно сложный будет, описание простейшего в документации вам ничем не поможет. Начинаете с parseUrl() и определяете в нем все исходные данные из строки запроса.
#
Re: Импорт данных в базу из GET запроса с проверкой условий
HostCMS,
мне необходимо выводить массив, либо одно значение из 3-го уровня модуля (запили полей). Функция parseUrl мне тут не подойдет, я думаю, так как для сайта предполагается вывод данных модуля в двух местах:
1. В шапке сайта (среднее из последних 10-ти записей уровня 3)
2. На отдельной странице (максимальное значение за период, минимальное значение за период, множество значений за период для построения графика(-ов), из уровня 3 так-же)
Постараюсь описать то, что напридумывал как точка вызова из шаблона:
1.

$Wm_Channel_Controller_Show = new Wm_Channel_Controller_Show(
      Core_Entity::factory('Wm_channel', 1) // идентификатор канала данных, уровень 1
   );

   $Wm_Channel_Controller_Show
      ->xsl(
         Core_Entity::factory('Xsl')->getByName('Меню')
      )
                ->field(1) // идентификатор поля данных, уровень 2, если NULL - вывод из всех полей
               ->records() // идентификатор записи данных, уровень 3, если NULL - вывод всех записей
               ->recordsOrderBy(2) // тип сортировки данных поля уровня 3, предполагается несколько типов
               ->limit(10) // количество записей уровня 3 (а может стоит контроллер показа делать на 3-м уровне?)
               ->avg(1) // среднее значение данных поля уровня 3 с округлением до десятых &1
      ->show();

Может опять мутно, но киньте уже какую-нибудь доку, хотя-бы примитивную по логике создания методов контроллера с порядком необходимых действий (типо 1 - включить метод в _allowedProperties, 2 - создать __construct, 3 - создать show(), 4 - в show() что-то вызвать, ну и т.д.)
Модератор
#
Re: Импорт данных в базу из GET запроса с проверкой условий
Значит данные вы указываете сами, поэтому parseUrl() просто не используете.

Соответственно в методе show() анализируете свои опции, которые передали, на их основе текущему объекту (что у вас идет в конструктор) добавляете дочерними элементами те, что вам нужны на основе опций, заданных перед show() и вызываете
echo $content = parent::get();

собственно все.
#
Re: Импорт данных в базу из GET запроса с проверкой условий
echo $content = parent::get();
сейчас уже включено, но оно выводит как раз только верхний уровень данных, с Цитата:
текущему объекту (что у вас идет в конструктор) добавляете дочерними элементами те, что вам нужны на основе опций
как раз немного не разобрался, если можно - тут чуточку подробнее.
Модератор
#
Re: Импорт данных в базу из GET запроса с проверкой условий
danila-sava писал(а):
текущему объекту (что у вас идет в конструктор) добавляете дочерними элементами те, что вам нужны на основе опций
как раз немного не разобрался, если можно - тут чуточку подробнее.

вы свою логику пишите, выбираете с использованием ORM нужные объекты на основании тех опций контроллера, что заданы снаружи.
Я не знаю вашу логику, которую вы хотите заложить в контроллер, не вижу кода и каких-то конкретных вопросов по конкретным проблемам.
#
Re: Импорт данных в базу из GET запроса с проверкой условий
Давайте тогда по факту - не вышло ничего. Вот код show.php
<?php
/**
* WebMon. Каналы. Контроллер. show.php
*/
defined('HOSTCMS') || exit('HostCMS: access denied.');

class Wm_Channel_Controller_Show extends Core_Controller {

    /**
     * Allowed object properties
     * @var array
     */
    protected $_allowedProperties = array(
        'showFields',
        'showPanel',
        'cache'
    );

    /**
     * Cache name
     * @var string
     */
    protected $_cacheName = 'wm_show';
    /**
     * List of fields
     * @var array
     */
    protected $_wmFields = array();


    public function __construct(Wm_Channel_Model $oWm_Channel)
    {
        parent::__construct($oWm_Channel->clearEntities());

        $this->showPanel = $this->cache = TRUE;

        $this->showFields = TRUE;
    }

    /**
     * Check if data is cached
     * @return NULL|TRUE|FALSE
     */
    public function inCache()
    {
        if ($this->cache && Core::moduleIsActive('cache'))
        {
            $oCore_Cache = Core_Cache::instance(Core::$mainConfig['defaultCache']);
            return $oCore_Cache->check($cacheKey = strval($this), $this->_cacheName);
        }

        return FALSE;
    }

    /**
     * Show frontend panel
     * @return $this
     */
    protected function _showPanel()
    {
        // Panel
        $oXslPanel = Core::factory('Core_Html_Entity_Div')
            ->class('hostcmsPanel');

        $oXslSubPanel = Core::factory('Core_Html_Entity_Div')
            ->class('hostcmsSubPanel hostcmsXsl')
            ->add(
                Core::factory('Core_Html_Entity_Img')
                    ->width(3)->height(16)
                    ->src('/hostcmsfiles/images/drag_bg.gif')
            );

        $sPath = '/admin/wm/index.php';
        $sAdditional = "hostcms[action]=edit&hostcms[checked][0][0]=1";
        $sTitle = Core::_('wm_channel.model_name');

        $oXslSubPanel->add(
            Core::factory('Core_Html_Entity_A')
                ->href("{$sPath}?{$sAdditional}")
                ->onclick("hQuery.openWindow({path: '{$sPath}', additionalParams: '{$sAdditional}', dialogClass: 'hostcms6'}); return false")
                ->add(
                    Core::factory('Core_Html_Entity_Img')
                        ->width(16)->height(16)
                        ->src('/admin/images/structure_add.gif')
                        ->alt($sTitle)
                        ->title($sTitle)
                )
        );

        $oXslPanel
            ->add($oXslSubPanel)
            ->execute();

        return $this;
    }
    /**
     * Select fields
     * @return self
     */

    protected function _selectFields() {

        $oWm_Channel = $this->getEntity();

        $aFields = $oWm_Channel->wm_fields->findAll();

        foreach ($aFields as $oField) {
            echo $oField->id.' = '.$oField->name;
            $this->_wmFields[$oField->id] = $oField;
        }
        return $this;
    }
    /**
     * Show built data
     * @return self
     * @hostcms-event Wm_Channel_Controller_Show.onBeforeRedeclaredShow
     */
    public function show() {
        Core_Event::notify(get_class($this) . '.onBeforeRedeclaredShow', $this);

        $this->showPanel && Core::checkPanel() && $this->_showPanel();

        $bCache = $this->cache && Core::moduleIsActive('cache');

        if ($bCache)
        {
            $oCore_Cache = Core_Cache::instance(Core::$mainConfig['defaultCache']);
            $inCache = $oCore_Cache->get($cacheKey = strval($this), $this->_cacheName);

            if (!is_null($inCache)) {
                echo $inCache;
                return $this;
            }
        }
        // Показывать поля канала
        if ($this->showFields) {
            $this->_selectFields();
        }

        echo $content = parent::get();

        //Clear
        $this->_wmFields = array();

        return $this;
    }
}


Необходимо для начала показать все поля данных канала.
_selectFields
не добавляет поля в XML, хотя echo и var_dump показывают их наличие, что я делаю не так?
В XML только информация о канале:
<wm_channel id="1">
   <site_id>2</site_id>
   <name>Тест</name>
   <lastupd>2017-06-25 17:37:22</lastupd>
   <user_id>19</user_id>
   <active>1</active>
</wm_channel>

#
Re: Импорт данных в базу из GET запроса с проверкой условий
HostCMS,
надеюсь на Вашу помощь!!!! Или на чью-нибудь ещё)
#
Re: Импорт данных в базу из GET запроса с проверкой условий
как-то так
   protected function _selectFields() {

         $oWm_Channel = $this->getEntity();

         $aFields = $oWm_Channel->wm_fields->findAll();
         $this->addEntities($aFields_Values);
         return $this;
     }


Вы в массив кладете, а в XML не добавляете
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Импорт данных в базу из GET запроса с проверкой условий
EugenyP,
понял, спасибо, дело пошло!
Авторизация