Вход • Регистрация

Создание модуля

  • 14 марта 2015 г.
  • Очень плохая документация по созданию модуля на Diafan Cms, особенно для тех кто не работал с другими cms.
    Админку сделал, очень легко, описано в документации достаточно, а если посмотреть про пользовательскую часть, то беда.
    Особенно не понятно, с шаблонизатором и что в каком порядке вызывать.
    Так же пример в документации, зачем его нужно было выкладывать, раз он не рабочий)
  • 15 марта 2015 г.
  • В документации информации достаточно чтобы написать собственный модуль.
    Естественно как проектировать пользовательскую часть вам никто не напишет. И тут есть причина, модуль ваш и только вы представляете, то как он должен работать. Ещё на 100% уверен, что то, что написано в документации будет не достаточно, для реализации механизмов, которые просто отсутствуют в ЦМС. А отсутствуют они потому, что никто не решал задач которую пытаетесь решить вы. И это ваша и только ваша проблема и никто её кроме вас решать не будет.
  • 16 марта 2015 г.
  • Вроде бы все понятно, не ясно вот что:
    1)list_() – формирует список элементов;
    list_category() – формирует список элементов в категории;
    first_page() – первая страница модуля;
    id() – формирует данные для страницы элемента;
    show_block() – формирует данные для шаблонной функции.
    Я так понимаю это просто формальность и кроме того что эти функции просто так называются ни какого большего функционала не носят?
    2)работа с отображением:
    не совсем понятно что и как передается шаблонизатору.
    В примере именно вывод данных не работает.
    И так ли важно названия div'ок в view файлах?
    Шаблонизатор парсит их или это чисто для css?
    • 16 марта 2015 г.
    • вы это шутите так?
      • 16 марта 2015 г. , редакция: 16 марта 2015 г.
      • С шаблонизатором разобрался, только один момент.
        Я беру данные с бд и помещаю их в $result['rows'].
        Где поле 'a' - связано с другой таблицей.
        Делаю запрос на объекты и просто в цикле помещаю их в
        $result['row2'][$row['id']]=$row;
        И при выводе получается:
        foreach($result["rows"] as $row) $result['row2'][$row['a']];
        Правильно ли все)
        Нет ли более простых, лучше способов?

        Нет)) Не шучу, возможно да, вопросы могут показаться вам простыми, но для того этот форум и создан))
        Опыт в программировании есть, но не на php, тем более с использованием cms.

        На счет show_block разобрался, нужная вещь))))
        А вот другие функции.
        Допустим в админ панели довольно таки много чего автоматизированно, вывод данных и т.п. Разобрался во всем, в документации много чего написано и все в одном месте, на счет же пользовательской части практически весь функционал разбросан.

        Так же на счет функции id:
        В функции Init мы перехватываем передана ли переменная show
        if ($this->diafan->_route->show)
        {
        $this->model->id();
        }
        После чего вызываем функцию id:
        в ней лично я ни чего не нашел что бы помешало изменить название функции. Или я ошибаюсь?
        Так же можно описать функцию любую и в зависимости от $this->diafan->_route->show вывести данные.
        Может ли это в последствии помешать какому нибудь функционалу?
        • 16 марта 2015 г.
        • вопросы не только простые, но и не совсем, nffr сказать "в тему".
          Зачем вам менять название функции?
          Мой вам совет, потратьте пару дней, покопайтесь в исходниках и все встанет на свои места, и места будут пнятными, естественными и ничего переименовывать не захочется.
        • 16 марта 2015 г.
        • Вы лучше опишите, что Вы хотите получить.
          На 99% уверен, что программировать вообще не понадобится.
          • 16 марта 2015 г.
          • Ну как раз такой ответ я ждал)))
            Есть список команд, находятся в базе games_teams(id, name)
            И есть список игр между командами, таблица games(id, a(команда 1), b(команда 2))
            Все это реализовал в админке как один модуль, все нормально работает добавляет и т.п.
            Теперь нужно вывести все это дело в пользовательскую часть.
            Команда 1 vs Команда 2
            Команда 3 vs команда 4
            В таком роде.
            Ну естественно количество данных я сократил, в базу еще записывается и дата, изображение(команды, игры).
            • 16 марта 2015 г.
            • Цитата
              Опыт в программировании есть

              и ваш крайний вопрос как-то не пересекаются )

              • 16 марта 2015 г.
              • Вы здесь что бы осуждать людей?
                Пост был сделан 14 марта, 2 дня прошло, ни кто ни чего внятного не ответил.
                Не думал что официальный форум - флудилка и ни чего более.
            • 16 марта 2015 г.
            • Цитата
              Теперь нужно вывести все это дело в пользовательскую часть.

              Принцип прост, MVC. В админке чуть проще, т.к. там всё по одному принципу, поэтому там быстро у Вас получилось. А в публичной части надо побольше поколдовать, т.к. там воротить можно что угодно в свободном режиме.
              Собираете простейший контроллер, в модельке запросы к БД и формирование result. И во view вывод.
              Возьмите какой-нибудь простой модуль, типа news, и разберите его публичную часть. Даже склонируйте для образца. А далее метод "тыка", так быстрее запоминается
              • 16 марта 2015 г.
              • Ок, спс.
                Будем делать пока как делается, потом если что переделаем, по мере изучения стандартного функционала
        • 16 марта 2015 г.
        • Ну и труда вложили, Боже!!!
          Может это все решается флажком в админке CMS или парой движений в css?????
          • 16 марта 2015 г.
          • Цитата
            Ну и труда вложили, Боже!!!

            Это сарказм? Или же действительно можно сделать проще?
            Если что пишется новый модуль, а не пытаюсь дополнить что-то))
          • 16 марта 2015 г. , редакция: 16 марта 2015 г.
          • Вот как сделал я:
            Пока что просто вывожу список игр.
            В Init: $this->model->list_();
            В модели:
            Код

            public function list_()
            {
            if ($this->diafan->_route->cat)
            {
            Custom::inc('includes/404.php');
            }

            $time = mktime(23, 59, 0, date("m"), date("d"), date("Y"));
            $cache_meta = array(
            "name" => "list",
            "lang_id" => _LANG,
            "page" => $this->diafan->_route->page > 1 ? $this->diafan->_route->page : 1,
            "site_id" => $this->diafan->_site->id,
            //"role_id" => $this->diafan->_users->role_id ? $this->diafan->_users->role_id : 0,
            "time" => $time
            );

            //кеширование
            if (! $this->result = $this->diafan->_cache->get($cache_meta, $this->diafan->_site->module))
            {
            ////navigation//
            //$this->diafan->_paginator->nen = $this->list_query_count($time);
            //$this->result["paginator"] = $this->diafan->_paginator->get();
            ////navigation///
            //сохранение кеша
            $this->diafan->_cache->save($this->result, $cache_meta, $this->diafan->_site->module);
            }
            $rows = DB::query_fetch_all("SELECT * FROM {games}");
            foreach($rows as $row)
            {
            $this->result["rows"][] = $row;
            }
            $teams = DB::query_fetch_all("SELECT * FROM {games_teams}");
            foreach($teams as $team)
            {
            $this->result["teams"][$team['id']] = $team;
            }

            foreach ($this->result["rows"] as &$row)
            {
            $this->format_data_element($row);
            }
            $this->result['view'] = 'show';

            }


            private function format_data_element(&$row)
            {
            if (! empty($row["date"]))
            {
            $row["date"]=date('d.m.Y h:i:s', $row['date']);
            }

            }




            Запросы конечно можно в отдельную функцию лучше поместить, например:
            Код

            private function list_query($time)
            {
            $rows = DB::query_range_fetch_all("SELECT * FROM {games}");
            return $rows;
            }


            И файл view.show (конечно логичнее было бы назвать view.list, делал пока просто разобраться)
            Код

            foreach($result["rows"] as $row)
            {
            echo $row['date'].'</br>';
            echo $row['tournament'].'<div class="games">'.$result['teams'][$row['a']]['name']. vs '.$result['teams'][$row['b']]['name'].'</div>';
            echo '<hr>';
            }
            • 18 марта 2015 г.
            • Функции называть можете как угодно, конечно. Главное, по именам их вызывать.
              По Вашей function list_() можете не заморачиваться для начала с кешированием, пагинатором, а начинать с простых функций, типа
              Код
              echo "Привет, мир!";
              .

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум