Как я могу использовать com_ajax для загрузки и выгрузки другого модуля (для Adaptive Design)

Это вопрос вопроса Как отключить модуль на основе размера устройства или просмотра в Joomla 3 для оптимизации производительности мобильных устройств?

Как я могу использовать com_ajax для загрузки и выгрузки модуля? Вызов может быть выполнен с использованием либо чистого javascript, либо jquery, и он будет основан на размере видового экрана (мы используем mediacheck.js для этого: https://github.com/sparkbox/mediaCheck ).

В зависимости от того, где этот ответ идет, мы можем даже [заставить нашего разработчика] объединить компонент, чтобы разрешить такую ​​динамическую загрузку (выбрать точки останова, выбрать, какие модули загружать /выгружать).

Обоснование: Отзывчивый /адаптивный (выберите ваш аромат) необходим в наши дни, а значит, уменьшает размер загрузки для мобильных устройств (медленная скорость 3G, если на хорошей приемной, здесь, в Бразилии). Если я могу использовать 10 ~ 15 тыс. JQuery /Javascript, чтобы не загружать 20 ~ 200 тыс. Модулей (модули могут содержать изображения, поэтому да, может достигать довольно большого размера), я все для этого. Уменьшение помех на экране также необходимо для хорошего мобильного дизайна. Мы можем даже утверждать, что это «мобильная первая», потому что мы проектируем без модуля, а затем загружаем его, как позволяет размер экрана.

7 голосов | спросил Jonathan Roza - Zott Online Ag 28 PMpMon, 28 Apr 2014 14:23:59 +040023Monday 2014, 14:23:59

1 ответ


5

com_ajax действительно используется, только если данные для модуля поддерживаются (на основе JSON), хотя у него есть и другие функции. В некоторых случаях самый простой способ «просто» загрузить модуль - это создать новый файл шаблона. Это можно сделать, создав что-то вроде «module.php» в каталоге шаблона. Затем, используя что-то подобное внутри.

<?php
$jinput = JFactory::getApplication()->input;
$module = $jinput->get('module_pos', 'default_value', 'get');
?>
<jdoc:include type="modules" name="<?php echo $module; ?>"/>

Это должно загружать только модуль на странице, используя URL-адрес, например index.php?tmpl=module&module_pos=foo в запросе ajax, вы должны иметь возможность «просто» данные модуля. Это будет загружать все модули, назначенные в позицию, называемую module_pos.

У этого есть одна проблема, javascript. Модули добавляют javascript в главный тег через API Joomla. Чтобы бороться с этим, вам действительно нужно добавить больше к файлу module.php, чтобы узнать, что находится в главном теге, что еще не находится на текущей странице и в действительности найти и добавить то, что необходимо. Этот процесс будет довольно сложным, но если вы знаете модули, которые делают это, вы можете добавить больше к вашему ajax-вызову, чтобы автоматически делать это в зависимости от модуля.

Это поможет вам «загрузить» модуль, после загрузки через ajax просто используйте jquery, чтобы добавить html на страницу, где вам нужно, «разгрузить» его, просто удалите из dom.

, который можно выполнить с помощью jQuery(ROOT_ELEMENT_OF_MODULE).remove(); для удаления и jQuery(PARENT_ELEMENT_TO_INSERT_MODULE).html(MODULE_HTML);. Конечно, есть варианты, которые можно сделать, но это простое объяснение.

ответил Jordan Ramstad 28 PMpMon, 28 Apr 2014 17:33:53 +040033Monday 2014, 17:33:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132