Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 125 Ответов
  • 6301 Просмотров
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
J3.last
Модель JModelForm, вывод данных во фронте в 3 разных блока в одной вьюхе:
$this->item - основные данные
$this->item->list1 - дополнительные данные, список1
$this->item->list2 - дополнительные данные, список2
Список2 - весьма большой, необходимо вывести его с пагинацией (как? - это первый вопрос), при листании списка необходимо обновлять данные только в в блоке с выводом списка2, не перезагружая остальную страницу (как? - это второй вопрос).
Как подступиться - хз.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Делал как-то подобное. Пример даже сохранился. Там все на аяксе.

Возможно это не лучший вариант для фронта, но наследовался я от jmodellist.
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Ух ты, а пример кода сохранился?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
да есть могу скинуть куда нибудь компонент, заказчик все равно от него отказался и он уже год так висит недоделанный
интернет-блог: http://websiteprog.ru
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
постучался, могу на мыло отправить. ничего не должен, он незакончен все равно, возможно когда нибудь я его и доработаю
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Получил, буду ковырять. Премного благодарен!
« Последнее редактирование: 25.02.2015, 00:32:41 от AlekVolsk »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Не вопрос. Будут вопросы пиши. Возможно и не встанет сразу если я там что нибудь переделывал..
интернет-блог: http://websiteprog.ru
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
А в чем сложность? Нужный блок заполнять данными, а на клик по страничкам повесить AJAX. Естественно вызывать raw контроллер и представление. По сути все тоже самое, что и без AJAX ;)
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
А можно еще проще плагин fullajax запустить и весь сайт будет на аяксе.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А в чем сложность? Нужный блок заполнять данными, а на клик по страничкам повесить AJAX. Естественно вызывать raw контроллер и представление. По сути все тоже самое, что и без AJAX ;)
Сложность в том, что все 3 блока - это одно представление, и обновить 1 блок, не обновляя 2 других, и составляет вопрос.

А можно еще проще плагин fullajax запустить и весь сайт будет на аяксе.
А это что за чудо-зверь?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Плагин, запучкающий JavaScript, который так и называетсв, fullajax, корорый перехвалывает клики по ссылкам и аяксом подгружает контент, есть настройки динамических модулей и т.п.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
К сожалению, ссылка с JED ведет на сайт разраба, который закрыт на реконструкцию: http://getsite.org.ua/download/UNZIP_FIRST_addfullajax_2013.11.23.zip
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Цитировать
что все 3 блока - это одно представление
Да, но никто не мешает аяксом грузить в один из блоков другое представление ;)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
но никто не мешает аяксом грузить в один из блоков другое представление ;)
Век живи - век учись. Это как?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
AlekVolsk, не вчитался в стартпост, но если я правильно понял, то вы можете просто вывбрать в ответе сервера код нужного блока и выводить куда нужно.
Что-то в этом роде
Код: javascript
$.ajax({
url:'/blahblah.php'
}).
done(function(response){
$('my_selector').html($('my_selector>*',$(response)));
});
или если уж очень лень
Код: javascript
$('my_selector').load('/blahblah.php my_selector>*');
« Последнее редактирование: 26.02.2015, 12:41:22 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Век живи - век учись. Это как?
Делаем в месте вывода компонента в шаблоне
Код: html4strict
<div id="main"><jdoc:include type="component"/></div>
В скрипте перехватываем клик по ссылке
Код: javascript
$("#main a").on("click", function () {
    $.ajax({
        url: $(this).attr('href')+'?tmpl=component',
        dataType: 'html'
    }).done(function( data ) {
        if (data != '') {
            $('#main').html(data);
        }
    });
})

Если уже есть основной тег, обрамляющий контент с идентификатором, то можно использовать его, либо добавить идентификатор к существующему тегу. Можно конечно и по классу выборку сделать, но это не производительно.
В шаблоне в папке HTML посмотреть наличие файла component.php, если нет, то нужно создать его, код подсмотреть в соседних шаблонах.
« Последнее редактирование: 26.02.2015, 09:42:49 от Arkadiy »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Век живи - век учись. Это как?
zomby6888 давал пример - уверен, что в его компоненте именно так и сделано.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
В скрипте перехватываем клик по ссылке
Код: javascript
$("#main a").on("click", function () {
так вешаешь множество обработчиков на ссылки если они есть внутри #main
Правильно использовать делегирование
Код: javascript
$("#main").on("click", "a", function () {
И далее не совсем здесь  нужен $.ajax
К примеру я бы так написал.
Код: javascript
(function ($) {
        $("#main").on("click", "a", function () {
          $.get($(this).attr('href'), {
            tmpl: 'component'
          }, function (result) {
            // здесь обрабатываем полученные данные в result
            }
          }/* dataType при необходимости */);
        });
})(jQuery);
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Код: javascript
$("#main a").on("click", function () {
так вешаешь множество обработчиков на ссылки если они есть внутри #main
Правильно использовать делегирование
Код: javascript
$("#main").on("click", "a", function () {
И далее не совсем здесь  нужен $.ajax
К примеру я бы так написал.
Код: javascript
(function ($) {
        $("#main").on("click", "a", function () {
          $.get($(this).attr('href'), {
            tmpl: 'component'
          }, function (result) {
            // здесь обрабатываем полученные данные в result
            }
          }/* dataType при необходимости */);
        });
})(jQuery);
1. Согласен, 2. get - это обертка над AJAX, никакой разницы.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
zomby6888 давал пример - уверен, что в его компоненте именно так и сделано.

Абсолютно верно, сейчас посмотрел. Я сделал два отдельных raw представления и одно общее в которое грузил эти отдельные. Я еще добавил метод в общее представление который при первой загрузке страницы буферизует отдельные raw вьюхи чтобы вывести в основной, ну а после загрузки основной страницы уже аяксом они грузятся.
« Последнее редактирование: 26.02.2015, 14:12:46 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Абсолютно верно, сейчас посмотрел. Я сделал два отдельных raw представления и одно общее в которое грузил эти отдельные. Я еще добавил метод в общее представление который при первой загрузке страницы буферизует отдельные raw вьюхи и выводит в основной, ну а там уже аяксом.

Ну да, можно по разному делать.
Просто суть в том, что не нужно ограничиваться рамками только одного MVC. Joomla позволяет сделать практически что угодно, и в итоге это вопрос знаний инструментов и умения их применения. Как-то так :)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Итак, имею: 2 вьюхи и к ним 2 модели, первичная (pcp, html) и вторичная (pcprl, raw), из первичной вызываю вторичную, но вторичная вьюха при этом не  видит свою модель. Куда копнуть?
Выкладывать листинги 7 файлов - объемно слишком, приаттачил архив (только задействованные файлы этих двух вьюх с моделями и контроллером).
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Решение найдено совместно с zomby6888 (консультации в скайпе):
В первичной вьюхе (view.html.php) прописываем универсальный метод:
Код: php
  public function renderView($name, $componentName)
  {
    $name = ucfirst(strtolower($name));
    $componentName = ucfirst(strtolower($componentName));
    $model = JModelLegacy::getInstance($name, $componentName.'Model');
    include_once JPATH_COMPONENT.'/views/'.$name.'/view.raw.php';
    $className = $componentName.'View'.$name;
    $view = new $className();
    $view->setModel($model);
    ob_start();
    $view->display();
    $out = ob_get_clean();
    return $out;
  }

Далее в шаблоне вьюхи в нужном месте вызываем его:
Код: php
echo $this->renderView('имя вызываемой raw-вьюхи', 'имя компонента без префикса com_');

Всем откликнувшимся спасибо!
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Итак, имею: 2 вьюхи и к ним 2 модели, первичная (pcp, html) и вторичная (pcprl, raw), из первичной вызываю вторичную, но вторичная вьюха при этом не  видит свою модель. Куда копнуть?
Выкладывать листинги 7 файлов - объемно слишком, приаттачил архив (только задействованные файлы этих двух вьюх с моделями и контроллером).
Только не понятно зачем все эти манипуляции то?!
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Применение ajax (Аякс) в модуле Joomla

Автор tm2010

Ответов: 34
Просмотров: 5314
Последний ответ 26.09.2020, 09:38:35
от b2z
Обработка AJAX в компоненте Joomla!3

Автор balancer

Ответов: 33
Просмотров: 11921
Последний ответ 23.07.2020, 07:45:53
от Dolphin4ik_1
Пагинатор в нестандартном компоненте

Автор sesil

Ответов: 8
Просмотров: 1281
Последний ответ 04.09.2019, 11:24:30
от sesil
Не видится файлы языкового пакета в созданном компоненте

Автор khachatur86

Ответов: 0
Просмотров: 1717
Последний ответ 30.03.2019, 23:35:26
от khachatur86
Стандартная система рейтингов в custom компоненте

Автор platonische

Ответов: 1
Просмотров: 1014
Последний ответ 12.02.2019, 16:55:03
от platonische