Мирон Яцкевич
5629 сообщений
#13 лет назад
Как можно в Joomla 1.5 программно включить/выключить модуль ?

Можно ли это сделать на JavaScript ?
Дорохов Андрей
19 сообщений
#13 лет назад
Если хотите узнать, как включаются/выключаются модули, можете взглянуть на функцию в панели администратора, которая это выполняет. В файле:
/administrator/components/com_modules/controller.php

Смотрите класс ModulesController, метод publish().
По сути, задача сводится к изменению параметра публикации ('published' модуля в БД. "1" - модуль опубликован, "0" - модуль скрыт.
Естественно, можно сделать и на JavaScript (с помощью AJAX).
Мирон Яцкевич
5629 сообщений
#13 лет назад
Цитата ("Steadfast"):
Естественно, можно сделать и на JavaScript (с помощью AJAX)

Вот здесь интересно. Сейчас я использую для реализации такого функционала Joomla 1.5.25

Любые вставки php в любой javascipt ф-ции выполняются еще во время обновления страницы или
сразу же при переходе по юрл сайта в браузере.

То есть например код

<?php
$dbo =& JFactory::getDBO();
$sql_activate = 'UPDATE #__modules SET published=1 WHERE id=47';
$dbo->setQuery($sql_activate);
$dbo->Query();
?>


выполняется сразу же при переходе по юрл сайта в браузере.

Не смотря на то, что он расположен в ф-ции onsomeobjectmouseover, которая может выполниться только
в результате действий пользователя

То есть сразу же при переходе по юрл сайта в браузере в базе в таблице jos_modules ячейке находящейся в колонке published
и имеющей id = 47 будет присвоено значение 1 :o
Дорохов Андрей
19 сообщений
#13 лет назад
PHP-код исполняется на сервере, и лишь затем отправляется в браузер пользователю.
Поэтому, как только Вы введёте URL (или обновите страницу), то PHP-код тут же будет выполнен.
С помощью JavaScript Вы можете сделать "скрытый" запрос к серверу, который заставит выполнить обновление БД, не перезагружая страницы.

Вот пример с использованием библиотеки jQuery:
<script type="text/javascript">
$(document).ready(function() {
$("#someblock").mouseover(function() {
$.ajax('http://site/index.php?somekey');
});
});
</script>


И Ваш код на PHP:
<?php
if (isset($_GET)) {
$dbo =& JFactory::getDBO();
$sql_activate = 'UPDATE #__modules SET published=1 WHERE id=47';
$dbo->setQuery($sql_activate);
$dbo->Query();
}
?>

Это, конечно, грубый пример, но суть должна быть понятна.
Мирон Яцкевич
5629 сообщений
#13 лет назад
Цитата ("Steadfast"):
суть должна быть понятна

Суть то мне понятна. При чем давно.

Но на деле у меня при попытке выполнить http://site/ajax.php?somekey
при передаче переменной из index.php выполнение ajax.php почему-то обрывается
при попытке выполнить следующие строки :

JPluginHelper::importPlugin('system');
jimport( 'joomla.application.module.helper' );*/

$mainframe = JFactory::getApplication('site'); //необходим для синхронизации с сессией вызывающего скрипта
$mainframe->initialise();

Я и раньше использовал ajax.php но никогда не обращался к нему из index.php

Одним словом здесь мне до конца не ясно.

Но Вы предложили обратиться к index.php, а не ajax.php

Думаю такое может работать