LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
19.06.2013, 19:05:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 2.5 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Как получить ID для каждого выводимого модуля на странице  (Прочитано 878 раз)
0 Пользователей и 1 Гость смотрят эту тему.
enshtein
Осваиваюсь на форуме
***

Репутация: +9/-0
Offline Offline

Сообщений: 79


« : 11.01.2012, 23:12:16 »

Пишу расширение для администрирования сайта из Front-End'а - эдакий Dashboard...
Очень хочется добавить возможность редактирования модулей на странице через простой клик по ссылке рядом с модулем - как к примеру это сделано в Drupale 7 (там в режиме администрирования на сайте напротив каждого блока отображается контрол настроек его), тоже самое есть в Bitrix.
Самый банальный вариант создать свой стиль оформления для всех модулей к примеру так:
Код:
<?php
  function modChrome_STYLE( $module, &$params, &$attribs )
  {
     // здесь получить ссылку на редактирования модуля используя $module->id - ID модуля
     // отдать контент модуля
  }
?>
и все бы ничего но хочется универсального решения - а не привязанного к определенному шаблону (через создание своего стиля)

Может кто-нибудь знает как можно отловить вывод модулей на странице? Жалко что в Joomla API нет такого рода событий для реакции из плагинов.
Записан
enshtein
Осваиваюсь на форуме
***

Репутация: +9/-0
Offline Offline

Сообщений: 79


« Ответ #1 : 11.01.2012, 23:40:24 »

в голову пришла бредовая идея:
Метод в системном плагине для теста добавляющий в начале контента модуля его ID:
   
Код:
function onAfterRender() {
        if ($this->appl->isAdmin()) return;
        $body = JResponse::getBody();
        foreach (JModuleHelper::_load() as $module) {
            $body = str_ireplace($module->content, $module->id . $module->content, $body);
        }
        JResponse::setBody($body);           
    }
жесть конечно полная...
Записан
karabert
Давно я тут
****

Репутация: +26/-1
Offline Offline

Сообщений: 205



« Ответ #2 : 12.01.2012, 01:18:21 »

залезть в бд не проще?

пс и зная какие модули и где должны быть с помощью jquery например добавить HTML
« Последнее редактирование: 12.01.2012, 01:22:39 от karabert » Записан
karabert
Давно я тут
****

Репутация: +26/-1
Offline Offline

Сообщений: 205



« Ответ #3 : 12.01.2012, 01:26:36 »

из отладки

Цитировать
SELECT id, title, module, POSITION, content, showtitle, control, params
  FROM jos_modules AS m
  LEFT JOIN jos_modules_menu AS mm
  ON mm.moduleid = m.id
  WHERE m.published = 1
  AND m.access <= 0
  AND m.client_id = 0
  AND ( mm.menuid = 16 OR mm.menuid = 0 )
  ORDER BY POSITION, ordering
Записан
beliyadm
Профи
********

Репутация: +1488/-61
Offline Offline

Пол: Мужской
Сообщений: 7195


Севастополь==Россия


« Ответ #4 : 12.01.2012, 02:19:27 »

Код
jimport( 'joomla.application.module.helper' );
$mod = JModuleHelper::getModule('Название модуля');
print_r($mod);
Читать здесь http://docs.joomla.org/JModuleHelper/getModule
Записан
enshtein
Осваиваюсь на форуме
***

Репутация: +9/-0
Offline Offline

Сообщений: 79


« Ответ #5 : 12.01.2012, 08:45:52 »

залезть в бд не проще?
проще, но что мне это даст?
Суть проблемы заключается в поиске на странице этих самых модулей - и поиск в своём решении я произвожу по контенту. А контент модулей в базе есть только для статичных модулей произвольного HTML-содержимого.
пс и зная какие модули и где должны быть с помощью jquery например добавить HTML
ну то что можно знать какие модули есть на странице и выводятся на странице - это все понятно. А как вы их - эти модули найдете - мне к примеру нужно засунуть все модули на странице в тег DIV, добавить вместе с содержимым туда еще и ссылку "Edit module", в которой естественно будет использоваться ID модуля. Потому причем тут jquery я не понял пардон...

Цитировать
jimport( 'joomla.application.module.helper' );
$mod = JModuleHelper::getModule('Название модуля');
print_r($mod);
Читать здесь http://docs.joomla.org/JModuleHelper/getModule
а это к чему вообще? как это мне поможет по вашему?
Я умею получать информацию о модуле, но это совсем не то что требуется, тема о другом... (читать выше =)
Записан
enshtein
Осваиваюсь на форуме
***

Репутация: +9/-0
Offline Offline

Сообщений: 79


« Ответ #6 : 12.01.2012, 08:54:19 »

еще раз о то что получилось:
Код:
function onAfterRender() {
    $body = JResponse::getBody();
    foreach (JModuleHelper::_load() as $module) {
        $body = str_ireplace($module->content, '<div class="border: 1px dotted red;">' . $module->content . '<a href="http://allergy/administrator/index.php?option=com_modules&client=0&task=edit&cid[]=' . $module->id . '" class="modal" rel="{handler: \'iframe\', size: {x: 1000, y: 600}}">изменить модуль</a>' . '</div>', $body);
        JResponse::setBody($body); 
    }       
}
После рендеринга страницы, а собственно и всех модулей в позициях шаблона - этот метод изменяет тело модулей округляя их в специальный DIV и добавляя ссылку на редактирование модуля. Таким образом пользователь зайдя на страницу видит границы модулей и кликнув по ссылке изменить модуль у него открывается sbox где он не уходя с Front End'а сайта получает возможность отредактировать (настроить) модуль.

Еще раз повторюсь - все это можно было решить с помощью своего стиля в шаблоне (modChrome_***) - но хочется чтобы без каких-либо изменений в шаблоне все это работало.
Все это работает, но уж больно решение корявое, потому и спросил может кто знает как красивее и правильнее проделать тоже самое.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.18 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet