Forums / National / Russian / Тех. поддержка / Больная тема hook

12>>>

vpktz
#1 2023-11-23 15:34

Очень часто при верстке, сборке cotonti сталкиваюсь с моментом, где нужно информацию со одной странице вывести на некоторой другой, но там она уже не выводиться.

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

Вопрос, как выводить информацию того или иного модуля/плагина плагина в том месте где это хотелось бы?

Часто слышу о методе что "напиши hook" . Пытался пару раз углубится в это, но так не смог разобаться.

Хотелось бы разобраться и понять это. Более подробно, в деталях, на примере какого то маленького плагина. Информацию которого нужно  вывести например в header

Kabak
#2 2023-11-23 16:22

на сайте есть : страницы , форумы, комментарии.   Вам нужно вывести информацию из этих разделов или из каких-то других ?

Kort
#3 2023-11-23 16:23

В самом простом варианте это можно сделать, например, через плагин Pagelist:

  1. Создаем страничное экстраполе для указания ID страницы, с которой будем брать информацию (например, page_getpagedata).В шаблон page.tpl добавляем следующую конструкцию:
    <!-- IF {PAGE_GETPAGEDATA} -->
       {PAGE_GETPAGEDATA|sedby_pagelist('pagelist.getpagedata', 1, '', 'page_id = $this')}
    <!-- ENDIF -->
  2. В папке plugins/pagelist темы создаем файл pagelist.getpagedata.tpl:
    <!-- BEGIN: MAIN -->
    <!-- BEGIN: PAGE_ROW -->
       <div>
          {PAGE_ROW_TEXT}
       </div>
    <!-- END: PAGE_ROW -->
    <!-- END: MAIN -->
  3. В файл page.edit.tpl добавляем TPL-теги для правки нашего экстраполя:
    <tr>
      <td>
        {PAGEEDIT_FORM_GETPAGEDATA_TITLE}
      </td>
      <td>
        {PAGEEDIT_FORM_GETPAGEDATA}
      </td>
    </tr>

Теперь, если при правке страницы указать id страницы-донора, то конструкция из п. 1 выведет в соответствующем месте текст страницы-донора.

Естественно, в шаблоне pagelist.getpagedata.tpl можно использовать любое поле или экстраполе.

Если хочется в header.tpl / footer.tpl, то логика будет такая:

<!-- IF {PHP.pag.page_getpagedata} -->
  {PHP.pag.page_getpagedata|sedby_pagelist('pagelist.getpagedata', 1, '', 'page_id = $this')}
<!-- ENDIF -->

Если надо вообще отвязаться от текущей страницы и глобально вставлять страничное поле/экстраполе, тогда так:

{PHP|sedby_pagelist('pagelist.getpagedata', 1, '', 'page_id = 11')}

Пункты 1 и 3 в этом случае не нужны, вместо 11 указать id страницы-донора, а условие (если необходимо) придумать свое.

SED.by - создание сайтов, разработка плагинов и тем для Котонти
This post was edited by Kort (2023-11-23 16:57, 1 year ago)
vpktz
#4 2023-11-23 18:51
#47443 Kort:

В самом простом варианте это можно сделать, например, через плагин Pagelist:

  1. Создаем страничное экстраполе для указания ID страницы, с которой будем брать информацию (например, page_getpagedata).В шаблон page.tpl добавляем следующую конструкцию:
    <!-- IF {PAGE_GETPAGEDATA} -->
       {PAGE_GETPAGEDATA|sedby_pagelist('pagelist.getpagedata', 1, '', 'page_id = $this')}
    <!-- ENDIF -->

 На первом пункте уже не понимаю. 

Как создать экстраполе? (пж не ругайтесь)

Kort
#5 2023-11-23 19:10

Хмм. Все страньше и страньше...

Админка -> Управление -> Экстраполя -> Pages

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Argont
#6 2023-11-23 19:31
#47447 Kort:

Хмм. Все страньше и страньше...

Админка -> Управление -> Экстраполя -> Pages

Kort, при всём уважении, это вам просто, как одному из отцов этого детища, а новичкам нужна инструкция с пояснениями, с примерами. сам честно создавал метом проб и ошибок, но прошел не так далеко как хотелось бы, и это не правильно. хотелось бы иметь под рукой руководство по созданию экстраполей, начиная с основ, - типы экстраполей, и что каждый из них значит и для чего лучше использовать, а там дальше в лес, взависимости от типа экстраполя - лес сгущается на параметрах полей. Экстраполя в движке котонти, это то что можно назвать "фишкой", преимуществом, но к сожалению этот потенциал уверен многими не раскрывается в полной мере в силу скудной документацией по этой теме.

иногда поржать над задравшим подбородок разработчиком
vpktz
#7 2023-11-25 19:42
#47443 Kort:

В самом простом варианте это можно сделать, например, через плагин Pagelist:

  1. Создаем страничное экстраполе для указания ID страницы, с которой будем брать информацию (например, page_getpagedata).В шаблон page.tpl добавляем следующую конструкцию:
    <!-- IF {PAGE_GETPAGEDATA} -->
       {PAGE_GETPAGEDATA|sedby_pagelist('pagelist.getpagedata', 1, '', 'page_id = $this')}
    <!-- ENDIF -->
  2. В папке plugins/pagelist темы создаем файл pagelist.getpagedata.tpl:
    <!-- BEGIN: MAIN -->
    <!-- BEGIN: PAGE_ROW -->
       <div>
          {PAGE_ROW_TEXT}
       </div>
    <!-- END: PAGE_ROW -->
    <!-- END: MAIN -->
  3. В файл page.edit.tpl добавляем TPL-теги для правки нашего экстраполя:
    <tr>
      <td>
        {PAGEEDIT_FORM_GETPAGEDATA_TITLE}
      </td>
      <td>
        {PAGEEDIT_FORM_GETPAGEDATA}
      </td>
    </tr>

Теперь, если при правке страницы указать id страницы-донора, то конструкция из п. 1 выведет в соответствующем месте текст страницы-донора.

Естественно, в шаблоне pagelist.getpagedata.tpl можно использовать любое поле или экстраполе.

Если хочется в header.tpl / footer.tpl, то логика будет такая:

<!-- IF {PHP.pag.page_getpagedata} -->
  {PHP.pag.page_getpagedata|sedby_pagelist('pagelist.getpagedata', 1, '', 'page_id = $this')}
<!-- ENDIF -->

Если надо вообще отвязаться от текущей страницы и глобально вставлять страничное поле/экстраполе, тогда так:

{PHP|sedby_pagelist('pagelist.getpagedata', 1, '', 'page_id = 11')}

Пункты 1 и 3 в этом случае не нужны, вместо 11 указать id страницы-донора, а условие (если необходимо) придумать свое.

 

А другие способы есть? Это что то я в обще не осиляю, вернее слишком много вопросов у меня, через слово вашей инструкции у меня вопрос. Это значит  что я наверное точно долго буду тыкаться. Может проще еще каким нибудь способом?  

Argont
#8 2023-11-25 20:10
#47441 vpktz:

Очень часто при верстке, сборке cotonti сталкиваюсь с моментом, где нужно информацию со одной странице вывести на некоторой другой, но там она уже не выводиться.

Хотелось бы разобраться и понять это. Более подробно, в деталях, на примере какого то маленького плагина. Информацию которого нужно  вывести например в header

Вы хоть пример приведите, какую именно информацию и куда конкретно нужно

иногда поржать над задравшим подбородок разработчиком
vpktz
#9 2023-11-26 09:48
#47472 Argont:
#47441 vpktz:

Очень часто при верстке, сборке cotonti сталкиваюсь с моментом, где нужно информацию со одной странице вывести на некоторой другой, но там она уже не выводиться.

Хотелось бы разобраться и понять это. Более подробно, в деталях, на примере какого то маленького плагина. Информацию которого нужно  вывести например в header

Вы хоть пример приведите, какую именно информацию и куда конкретно нужно

В users.details.tpl есть тег {USERS_DETAILS_PROJECTS_COUNT} который выводит число сколько всего юзер сделал заказов.

Этот  тег срабатывает только в  users.details.tpl.

Я хочу сделать что бы на всех страницах где воводится  изер можно было вывести и количество его заказов. 

Что бы было типо информативно, под ником видно сразу какой рейтинг, отзывы, заказы

Я так понимаю этот тег от модуля projects

 

Как по моей логике мне что то подсказывает что проще маленький плагин сделать, который будет цыплять эту цифру. Это наверное и есть hook

This post was edited by vpktz (2023-11-26 09:59, 1 year ago)
Kort
#10 2023-11-26 10:05

В php-файле темы прописываем функцию:

function sedby_user_projects_count($user_id = 1) {
   Cot::$db->registerTable('projects');
   return Cot::$db->query("SELECT COUNT(*) FROM " . Cot::$db->projects . " WHERE item_userid = $user_id")->fetchColumn();
}

Отдаем ID пользователя этой функции в качестве аргумента для получения количества проектов. Например, на странице users:

<!-- BEGIN: USERS_ROW -->
...
{USERS_ROW_ID|sedby_user_projects_count($this)}
...
<!-- END: USERS_ROW -->
SED.by - создание сайтов, разработка плагинов и тем для Котонти
vpktz
#11 2023-11-26 13:12
#47480 Kort:

В php-файле темы прописываем функцию:

function sedby_user_projects_count($user_id = 1) {
   Cot::$db->registerTable('projects');
   return Cot::$db->query("SELECT COUNT(*) FROM " . Cot::$db->projects . " WHERE item_userid = $user_id")->fetchColumn();
}

Отдаем ID пользователя этой функции в качестве аргумента для получения количества проектов. Например, на странице users:

<!-- BEGIN: USERS_ROW -->
...
{USERS_ROW_ID|sedby_user_projects_count($this)}
...
<!-- END: USERS_ROW -->

Отлично работат, это прекрасно.

Это и есть тот  самый hook?

Kort
#12 2023-11-27 09:11

Это просто глобальная функция

SED.by - создание сайтов, разработка плагинов и тем для Котонти
vpktz
#13 2023-11-27 19:13
#47493 Kort:

Это просто глобальная функция

скачивал у вас pagellist его установка потребовала предустановить библиотеку Cotli

Что это за библиотека? для чго она?

Kort
#14 2023-11-28 07:31

Это библиотека функций, общих для pagelist и схожих плагинов. Скачивать здесь.

SED.by - создание сайтов, разработка плагинов и тем для Котонти
vpktz
#15 2023-11-28 18:37

Получается мой вопрос мог быть решен 4 способами?

1 Глобальная функция

2 Через плагин pagelist

3 Написать отдельный плагин

4 Через тот самый hook

12>>>