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

как добавить вызов блока в ссылку.

  • 23 сентября 2013 г.
  • Возникла необходимость вставить в меню каталога товаров в каждый раздел ссылку на новинки. По этой ссылке должна выводится страничка с товарами - новыми в данном разделе каталога, то есть то, что выдает стандартный блок <insert name="show_block" module="shop" count="20" sort="rand" new_only > Шаблон у странички точно такой же как и при выводе списка товаров в каталоге в какой нить категории.

    Что-то запуталась и не могу понять, а как засунуть вызов этой странички в ссылку, аналогичную тому, что выводит просто товары в каталоге - типа мой_сайт/shop/catXXX

    Подскажите, если кто сталкивался.
    • 24 сентября 2013 г.
    • Ссылку на блок никак - только ссылку на страницу.
      Сделайте страницу - вставьте тег и тогда можно будет указать ссылку на эту страницу с блоком.
    • 24 сентября 2013 г. , редакция: 24 сентября 2013 г.
    • Ольга, шаблонный тег и ссылка в меню, это несколько разные вещи
      Самое простое: это сформировать поиском по каталогу страницу с результатами поиска по новинкам, скопировать эту ссылку и создать пункт в меню, где эту ссылку вставить в урл. Небольшое несоответствие в том, что в результатах поиска будут все товары-новинки, а не 20.
      Если надо ровно 20, то надо просто сложить эти две вещи, меню и шаблонный тег, как говорит Денис:
      1. Создаете обычную страницу, в ней в html-источник вставляете
      Код
      <insert name="show_block" module="shop" count="20" sort="rand" new_only >

      2. В меню делаете ссылку на эту страницу
      • 24 сентября 2013 г.
      • Это все понятно, я то думала, что может быть какое то другое решение. Но мне таое решение в лоб - не подходит, придется создавать кучу страниц, отличющихся одним параметром в блоке insert, - в частности параметром cat.


        Тогда немного изменю вопрос - можно ли и если можно, то как - параметры GET запроса к странице передать переменным, которые потом будут используются в блоке, размещенном на странице?

        Например я создала страницу, на которой вставлен блок:
        <insert name="show_block" module="shop" >

        а другие переменные, которые обычно используются в таком блоке count, sort, cat, и тд передать через переменные GET запроса.
        • 24 сентября 2013 г.
        • Смотря какая задача. Если бы Вы обрисовали потребности сначала, мы может быть предложили бы вообще иной вариант.
          Вы можете использовать переменные cat, sort и пр. - это глобальные разрешенные переменные, которые доступны в любом месте CMS как $this->diafan->cat $this->diafan->sort и т.д.
          Передаются через адресную строку они как site.ru/shop/cat333/sort222/show444/ - т.е. через слеш и "переменнаязначение".
          Однако, Вы спокойно можете использовать и GET-переменные, как обычно. Только чтобы имена не пересекались $_GET["idcat"] например.
          Для этого подправьте модельку в shop, для блока, типа если не пустая $_GET["idcat"], то условие.
        • 24 сентября 2013 г.
        • Все разобралась - оказывается можно все просто сделать:

          1) в function.php создаю свою функцию my_function()

          2) в нее помещаю код типа:
          Customization::inc('modules/shop/shop.model.php');
          $model = new Shop_model($this->diafan);
          $model->show_block($count, $cat_ids, $site_ids, $sort, $images, $images_variation, $param, $hits_only, $action_only, $new_only);
          $result = $model->get_result();
          $this->diafan->_tpl->get('show_block', 'shop', $result);

          3) Все необходимые переменные для show_block либо задаю принудительно, либо беру из GET
          например
          $count= $this->diafan->get_param($_GET, 'cnt', 0, 0);


          4) ну и вызываю страничку, на которой стоит тег вызова моей функции
          <insert name="my_function">

          с нужными переменными в get при вызове этой странички



          Если можно еще как то проще - подскажите! Я так понимаю можно как то обойтись и без моей странички со моей функцией , а вызывать аналогично созданную функцию в модуле shop


          • 25 сентября 2013 г.
          • Нифига себе просто
            • 25 сентября 2013 г.
            • Согласен не просто, но зато шаблонно и понятно что и для чего.
              Только я бы не пихал функцию в function.php всётаки специальный допил для магазина. Разместил бы в модуле магазина же.
              • 25 сентября 2013 г.
              • Вот по поводу допила. Мне то же не нравится создавать функцию в function. Как то громоздко, хотя и все логично. Хочу пойти другим путем.

                Поэтому вопрос: - а как добавлять свою глобальную ( видимую во всех модулях) переменную - к уже существующим переменным в Диафане?. Почитала эту ветку - Вот список переменных, которые есть сейчас - это задано в init.php:

                Код
                $rewrite_variable_names_all = array('cat', 'param', 'show', 'page', 'year', 'month', 'day', 'step', 'sort', 'add', 'edit');


                Добавляю сюда в список свою переменную, ну, например, как вариант, ng ( new_goods)
                по идее она теперь должна в любом модуле быть видна как $this->diafan->ng
                - хочу при ее наличии выводить список новинок при любом выводе товаров в магазине и в списке товаров и в поиске итд
                например: localhost/shop/cat6 - выводит все товары в категории 6, а если localhost/shop/cat6/ng1/ - все новые товары, ну тут много вариантов можно придумать.
                Тогда можно чуть чуть изменить запросы в модели model.php добавив в них где надо что то типа
                Код
                .($this->diafan->ng==1)? "AND s.new=1 " : '' ).
                Получится решение первоначальной задачи но более красиво и удобно.

                Так вот - массив я изменила, теперь
                Код
                $rewrite_variable_names_all = array('cat', 'param', 'show', 'page', 'year', 'month', 'day', 'step', 'sort', 'add', 'edit','ng');

                Но дальше не работает, при вызове странички localhost/shop/cat6/ng1/ выводит 404.php

                Вопрос к гуру: - где еще надо прописать, что у меня есть новая переменная и так что бы не выбрасывало на 404.php ?

                Конечная задача - научиться добавлять свои сквозные переменные, видимые как $this->diafan->имя_переменной и не мешающие работе системы
            • 25 сентября 2013 г.
            • Ну если PHP не знаешь, то да :)
              А для истинных маэстро - музыка!
              • 26 сентября 2013 г.
              • Ну тут даже не в знании РНР дело. Скорее в понимании принципов объектноориентированного программирования, проецированных на использованый язык. Я чёто до сих пор привыкнуть к JS немогу. Больше времени уходит на изобретение каких либо jQuery штук, чем на работы по РНР.

Новости

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

Форум