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

Вывести заголовок категории H1 из дополнительного поля

  • 29 января 2019 г.
  • Всем привет. Хочу для категории вывести заголовок H1, отличный от названия категории. С задачей добавления дополнительного поля в админке и базе данный справился, а вот вывести - никак не получается, что только не правил, какие способы только не использовал.
    Подскаже, пожайлуйста, какие файлы методы поправить?
    • 29 января 2019 г. , редакция: 29 января 2019 г.
    • Самое простое, через Дин блок вывести.
      Добавление поля в базу это крайний вариант.
      • 30 января 2019 г.
      • Хороший способ, спасибо. Сделал через базу, наверное должно быстрее работать..
        • 30 января 2019 г.
        • Экономия на спичках) Мы вот пару проектов обновляли недавно с 5.4 версии древних годов (2015-2016) и там была кастомизация по причине новых полей в базе. При обновлении до последней версии с этим начинаются проблемы, так как не всегда выполнена частичная кастомизация, проще отрубать модельки разные (в том числе выводы в админке).
          Идея простая - если есть возможность не трогать системные файлы, даже с частичной кастомизацией, лучше их не трогать.
    • 29 января 2019 г.
    • shop.model.php
      Код

      private function list_category_query()
      {
      if($this->diafan->_route->page > 1)
      {
      $fields = ", '' AS text";
      }
      else
      {
      $fields = ", [text]";
      }
      foreach ($this->diafan->_languages->all as $l)
      {
      $fields .= ', act'.$l["id"];
      }
      $row = DB::query_fetch_array("SELECT id, [name], СЮДА НАЗВАНИЕ СВОЕГО ИМЕНИ, [anons], [anons_plus] ".$fields.", timeedit, [descr], [keywords], [canonical], sort, parent_id, [title_meta], access, theme, view, view_rows, [act], noindex FROM {shop_category}"
      ." WHERE id=%d AND trash='0' AND site_id=%d"
      .(! $this->is_admin() ? " AND [act]='1'" : '')
      ." ORDER BY sort ASC, id ASC", $this->diafan->_route->cat, $this->diafan->_site->id);
      return $row;
      }


      Правильно будет создать файл shop.model.custom.php
  • 30 января 2019 г.
  • Спасибо за ответы, вчера в 3 ночи все таки осилил задачку. Дайте, пожалуйста, оценку, правильно ли я сделал (все работает), но.

    1. Скопировал в папку шаблона в custom файл shop.model.php, подправил SQL запрос в функции list_category_query(), как указано в ответе выше.

    2. Скопировал в папку шаблона в custom файл model.php, добавил в функцию protected function meta_cat($row) такую строку: $this->result["header"] = $row["header"];

    3. Скопировал в папку шаблона в custom файл controller.php, добавил в функцию public function get_global_variables() строку: if (! empty($this->result["header"]))
    {
    $this->diafan->_site->headermodule = $this->result["headermodule"];
    }

    4. Заголовок везде доступен для вывода следующим образом $this->diafan->_site->header;

    Все работает, но меня смущает кастомизация таких важных файлов.
    • 30 января 2019 г. , редакция: 30 января 2019 г.
    • Вы все слишком усложнили.
      В вашем случае каждый затронутый кусок кода надо выносить из файла в кастомизацию. https://www.diafan.ru/dokument/full-manual/developers/api/custom/

      Из варианта с динамическим блоком все проще. Создали дин блок для категорий. Далее в зависимости от вашего шаблона вывели заголовок во вьюхе вашего файла (мы делаем условие - если дин блок заполнен - выводим его, если нет - выводит стандартный h1)
      Все. Никаких файлов кроме вьюхи не затронуто.
    • 30 января 2019 г.
    • shop.model.php зря в кастом перекинули, сейчас вот обновление выйдет, а у Вас там старый лежит, считай не получили. Или shop.model.custom.php надо было делать или дин.блок, да. Всё правильно старожилы говорят.
      Ваш вариант работать будет, но это недальновидный костыль. Точнее палка в колеса ;)
      • 30 января 2019 г.
      • Все переделал на частичную кастомизацию, спасибо вам за оперативные подсказки! Работаю с цмс-кой второй день и она мне очень нравится :)
        Как бы теперь это поле в импорт-экспорт категорий затянуть? Ни новое поле из базы, ни динамический блок там сами не появляются))
    • 30 января 2019 г.
    • Вы прям по воробью из пушки :)

      Но за скорость входа в программирование на Diafan вам респект ))
      • 30 января 2019 г.
      • Спасибо! После нескольких лет на битриксе, это удовольствие, как все элегантно решается))
        • 30 января 2019 г.
        • Есть один знакомый Битриксоид. Ему говорят: "Да брось. Давай 1 проектик хотя бы на Diafan`е". "Нет": говорит - "Битра моё всё". Никак не хочет человек.
          А тут, опа - взял человек и попробовал. И всё получилось.
  • 23 октября 2019 г.
  • Всем привет, столкнулся с такой же проблемой. Мозг уже весь сломал, не могу H1 на странице с категорией вывести и все. Не передает данные моделька.
    Нужен совет, может где косячу :)

    Порядок действий:

    1. В файле shop.admin.category.php добавил:
    Код
    'htitle' => array(
    'type' => 'text',
    'name' => 'H1 Заголовок',
    'help' => 'h1 заголовок для раздела',
    'multilang' => true,
    ),

    2. В базе данных, в таблице diafan_shop_category создал поле htitle1

    После, в админке в ктегории появляется поле, данные сохраняются в БД. Все норм.

    3. В файле shop.model.php нашел функцию list_category_query(), в нее добавил необходимое поле:
    Код
    private function list_category_query()
    {
    if($this->diafan->_route->page > 1)
    {
    $fields = ", '' AS text";
    }
    else
    {
    $fields = ", [text]";
    }
    foreach ($this->diafan->_languages->all as $l)
    {
    $fields .= ', act'.$l["id"];
    }
    $row = DB::query_fetch_array("SELECT id, [name], [anons], [htitle], [anons_plus] ".$fields.", timeedit, [descr], [keywords], [canonical], sort, parent_id, [title_meta], access, theme, view, view_rows, [act], noindex FROM {shop_category}"
    ." WHERE id=%d AND trash='0' AND site_id=%d"
    .(! $this->is_admin() ? " AND [act]='1'" : '')
    ." ORDER BY sort ASC, id ASC", $this->diafan->_route->cat, $this->diafan->_site->id);
    return $row;
    }


    Но на странице категории, я его не могу достать. В массив не приходит данное поле. Где ошибка?
    • 23 октября 2019 г.
    • Я на 100% не уверена, нужно тестировать, но мне кажется, что вы модельку не допилили.
      Вы только получили данные, а еще ниже есть "Генерирует данные для списка товаров".
      Посмотрите этот момент.
      • 23 октября 2019 г.
      • Благодарю :) нашел упущенный момент.

        В функции list_() добавил:
        Код
        $this->result["htitle"] = $row["htitle"];
        • 23 октября 2019 г.
        • Только я бы все это дело вынес через частичную кастомизацию



          after private function list_category_query() {

          $row["htitle"] = DB:: ...

          }

Новости

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

Форум