JHTML::_( 'behavior.modal' ); Как с ним работать?

Тема в разделе "Программирование", создана пользователем OlegKor, 23.08.2009.

  1. Offline

    OlegKor Недавно здесь

    Регистрация:
    02.03.2009
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    Добрый день.

    В Joomla есть расширенные возможности, в частности возможность выводить сведения (материалы) в отдельном окне - JHTML::_( 'behavior.modal' );.
    Кто с этим может умело работать, поясните пожалуйста нюансы.

    Используя ....
    Код (CODE):
    1. <a class="modal" href="/images/garfild.jpg" rel="{handler: 'iframe', size: {x: 640, y: 480}}">
    2. <img src="/images/small_garfild.jpg">
    3. </a>

    ....мы успешно загрузим картинку и это все чудесно, но этого не достаточно.

    К примеру, необходимо вывести в модальном окошке список "объектов" из базы данных для выбора. Предположим. Я делаю свой компонент, у меня есть список (скажем список учащихся), так же есть "Учебные курсы", есть "Чебные группы". Суть заключается в том что эти данные уже существуют в виде списков в админпанели. И требуется редактируя группу добавить в нее "Учащихся" 1...2...5..15 человек. Такое добавление удобно выполнять, скажем щелкая на кнопке "Добавить" поднять окошко со списком учащихся и дать возможность выбрать одного или нескольких. нажать кнопку "ОК" и чтобы выбранные добавились в "Учебную группу" ...

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

    Вопрос 1. "Поднять" модальное окошко - не проблема, здесь все ясно и примеров этому множество. Используя код типа этого:
    Код (CODE):
    1. <a class="modal" title="<?php echo JText::_('SELECT'); ?>" href="http://joomla-support.ru/newthread.php?
    2. do=postthread&f=38" rel="{handler: 'iframe', size: {x: 650, y: 375}}">
    3. <?php echo JText::_('SELECT'); ?></a>

    Мы в итоге увидим окошко, но в этом окошке (во фрейме) загрузится вся страничка целиком, со всеми элементами. А хотелось бы загрузить только список элементов уже существующий и раелизованый в компоненте, к примеру список "Учащихся" как в админпанели, но без кнопочек и меню - просто список.
    Как такое решается?

    Можно ли вообще, получить хоть принципиальные пояснения концепции этой реализации. Исходя из модели Controller-Model-View. Для этого необходимо подготовить отдельный файл-модель, файл-view-tmpl или есть способы, которыми можно обойтись на существующих объектах (список необходимых данных уже существует в админпанели)? Как вообще знающие люди это решают?
     
  2.  
  3. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    для получения контента только нужного Вам компонента, Вам необходимо передать дополнительные параметры
    Код (PHP):
    1. &tmpl=component&format=raw
    , а если необходимо получить конкретные данные, то проще написать запросы вручную. И по поводу модальных окон - можете посмотреть в сторону JqueryUI.
     
  4. Tureckiy
    Offline

    Tureckiy специалист

    Регистрация:
    11.04.2009
    Сообщения:
    423
    Симпатии:
    30
    Пол:
    Мужской
    Фрейм подымает отдньное окно, а линк который в него передается должен вести на ваш новый контроллер, который надо самому в компоненте под вывод нужных данных дописать... (по другому помоему ни как)
     
  5. Offline

    OlegKor Недавно здесь

    Регистрация:
    02.03.2009
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    2 Tureckiy & omfgpanda
    Спасибо за ответы.
    Тут больше интересует именно стандартный MooTools интегрированный в Joomla.

    Я создал, по совету Tureckiy, контроллер для необходимого списка, список в модальном окне получаю. Теперь у меня вопрос, как сделать так. чтобы по щелчку на элементе, передать параметром, например его ID в элемент формы из которой поднималось модальное окно? Я не могу ни как понять как работает этот механизм. Как передаются в этом случае параметры в родительскую форму (в форму откуда был поднят список в модальном окне MooTools).
    P.S. - Возможно мои вопросы наивные или глупые, прошу прощения - это от неопытности.
     
  6. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    модальное окно - есть некий слой, который закрывает доступ к контенту страницы + слой, который в данный момент активен. Таким образом что бы передать параметры на "родительскую" страницу вам необходимо записать его в любой атрибут любого элемента на этой странице, либо в поле нужной вам формы. Т.е. фактически вы находитесь на этой же странице и можете обращаться к любым ДОМ-элементам.
     
  7. Offline

    NewArt Недавно здесь

    Регистрация:
    06.09.2009
    Сообщения:
    4
    Симпатии:
    0
    Ага... Только а в Jooml'е используется SqueezeBox на основе MooTools http://digitarald.de/project/squeezebox/
     
  8. Offline

    NewArt Недавно здесь

    Регистрация:
    06.09.2009
    Сообщения:
    4
    Симпатии:
    0
    предлагаю посмотреть это на примере уже работающего выбора материалов для пункта меню
    в том случае если пункт меню указан как "Стандартный шаблон материала"
    в редактировании пункта меню есть поле "Выберите материал" и кнопка "Выбрать"

    вот там и кроется простой пример реализации нужной функциональности - насколько я понимаю ваш вопрос.
    так что надо просто полистать уже имеющиеся исходники.....


    [\administrator\components\com_content\elements\article.php]

    //декларируется функция -- затем эта ф-я вызывается в "\administrator\components\com_content\views\element\view.php" по событию "onClick" на названии (в данном случае - статьи...)
    $js = "
    function jSelectArticle(id, title, object) {
    document.getElementById(object + '_id').value = id;
    document.getElementById(object + '_name').value = title;
    document.getElementById('sbox-window').close();
    }";
    $doc->addScriptDeclaration($js);



    JHTML::_('behavior.modal', 'a.modal'); /// подключает "\libraries\joomla\html\html\behavior.php"

    --[BEGIN]
    $document->addScriptDeclaration("
    window.addEvent('domready', function() {

    SqueezeBox.initialize(".$options.");

    $$('".$selector."').each(function(el) {
    el.addEvent('click', function(e) {
    new Event(e).stop();
    SqueezeBox.fromElement(el);
    });
    });
    });");
    --[END]
     

Поделиться этой страницей

Загрузка...