Форум русской поддержки Joomla!® CMS
04.12.2016, 07:55:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

com_ajax использование модуля

 (Прочитано 828 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Wertos
Завсегдатай
*****

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

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


« : 03.03.2016, 23:29:03 »

Читал документацию, возможно не совсем внимательно, но много раз... https://docs.joomla.org/Using_Joomla_Ajax_Interface/ru
Выполняю запрос
Код:
index.php?option=com_ajax&module=mymodule&format=debug
результат таков
Код:
LogicException Object
(
    [message:protected] => Модуль mod_mymodule не опубликован, у вас остутствуют права доступа на модуль или модуль не назначен для текущего пункта меню
Создаю отдельный файл...
Код
jimport('joomla.application.module.helper');
$module = JModuleHelper::getModule('mod_mymodule');
var_dump($module);
Результат
Код:
object(stdClass)[51]
  public 'id' => int 0
  public 'title' => string '' (length=0)
  public 'module' => string 'mod_mymodule' (length=12)
  public 'position' => string '' (length=0)
  public 'content' => string '' (length=0)
  public 'showtitle' => int 0
  public 'control' => string '' (length=0)
  public 'params' => string '' (length=0)

Модуль опубликован на главной, работает отлично.
Это может быть из за того, что у меня несколько таких модулей на главной, с разными параметрами ? И если да, как тогда с ними работать ?
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #1 : 03.03.2016, 23:34:30 »

Код
public 'id' => int 0

В этом и проблема. В com_ajax идёт проверка:
Код
if ($moduleObject->id != 0)

И выкидывает ошибку:

Код
// Module is not published, you do not have access to it, or it is not assigned to the current menu item
else
{
$results = new LogicException(JText::sprintf('COM_AJAX_MODULE_NOT_ACCESSIBLE', 'mod_' . $module), 404);
}
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #2 : 03.03.2016, 23:39:48 »

Код
public 'id' => int 0

В этом и проблема. В com_ajax идёт проверка:
Код
if ($moduleObject->id != 0)

И выкидывает ошибку:

Код
// Module is not published, you do not have access to it, or it is not assigned to the current menu item
else
{
$results = new LogicException(JText::sprintf('COM_AJAX_MODULE_NOT_ACCESSIBLE', 'mod_' . $module), 404);
}
Да, это я понял. НО как тогда быть ? Я просто создал файл php и использовал
Код
$module = JModuleHelper::getModule('mod_mymodule');
И там тоже id = null !
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #3 : 03.03.2016, 23:45:02 »

Название моделя точно пишите?
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #4 : 03.03.2016, 23:48:16 »

Название моделя точно пишите?
100500% точно, вот так он назван mod_my_module и даже так делал
Код
$module = JModuleHelper::getModule('mod_my_module', 'Видео - новое');
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #5 : 03.03.2016, 23:55:23 »

Не, ну явно что-то не то. Проверьте JModuleHelper::getModule на другом модуле.
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #6 : 03.03.2016, 23:58:04 »

Не, ну явно что-то не то. Проверьте JModuleHelper::getModule на другом модуле.
Проверял. Отлично всё.
Код:
object(stdClass)[59]
  public 'id' => string '428' (length=3)
  public 'title' => string 'SLogin' (length=6)
  public 'module' => string 'mod_slogin' (length=10)
  public 'position' => string 'login' (length=5)
  public 'content' => string '' (length=0)
  public 'showtitle' => string '0' (length=1)
  public 'params' => string  (length=325)
  public 'menuid' => string '0' (length=1)
  public 'name' => string 'slogin' (length=6)
  public 'style' => null

Это может быть из за того, что у меня три таких модуля создано ?
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #7 : 04.03.2016, 00:04:51 »

Возможно, не могу сказать 100%.
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #8 : 04.03.2016, 00:07:22 »

Возможно, не могу сказать 100%.
Нет, оставил только один опубликованный, ничего не поменялось.
Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #9 : 04.03.2016, 00:47:06 »

Значит где-то ошибка, чудес не бывает...
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #10 : 04.03.2016, 00:56:01 »

Значит где-то ошибка, чудес не бывает...
Вот такая закономерность обнаружилась.
если в названии модуля есть _ т.е. mod_my_module, то не работает ! Так же со всеми модулями с 2 _ ! Например стандартный модуль
mod_articles_categories который у меня опубликован, тоже не выводит никаких данных.

Если в index.php, в самый низ добавить

Код
$module = JModuleHelper::getModule("mod_my_module");
var_dump($module);
 
Всё отлично выводиться !
Так как же тогда получить параметры модуля, например в своём PHP файле ?!  Shocked

В своём PHP файле можно получить параметры модуле опубликованных только на всех страницах !!

Код:
Returns a stdClass object containing information about the module requested. A given module will only be returned if it meets the following criteria:

it is enabled;
it is assigned to the current menu item or is assigned to all menu items;
the user meets the access level requirements.

Вопрос открыт ! Как быть с com_ajax
« Последнее редактирование: 04.03.2016, 01:23:01 от Wertos » Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

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


« Ответ #11 : 04.03.2016, 01:49:24 »

Так как же тогда получить параметры модуля, например в своём PHP файле ?!  Shocked
В каком?

Что выводит такой запрос
Показать текстовый блок
« Последнее редактирование: 04.03.2016, 01:55:25 от robert » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #12 : 04.03.2016, 01:56:51 »

index.php?option=com_ajax&module=mymodule&format=debug
и
результат таков
 Модуль mod_mymodule не опубликован, у вас остутствуют права доступа на модуль или модуль не назначен для текущего пункта меню

А у вас модуль опубликован в админке?
Если опубликован то стоит ли отображение во всех пунктах меню?
Если стоит отображать только на какой то конкретной странице,  то естественно модуль не отобразиться!
Что бы отобразился передайте ему index.php?option=com_ajax&module=mymodule&format=debug8Itemid=123, где 123 - это id пункта меню к которому привязан модуль!
Но насколько я помню в аяксовый модуль параметры все равно не передаются! нужно самому их получить!
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #13 : 04.03.2016, 01:57:32 »

В каком?
Например в 1.php
Код
define( '_JEXEC', 1 );
define('JPATH_BASE', __DIR__);
include ( JPATH_BASE .'/includes/defines.php' );
include ( JPATH_BASE .'/includes/framework.php' );
defined('DS') or define('DS', DIRECTORY_SEPARATOR);
 
JFactory::getApplication('site');
 
jimport('joomla.application.module.helper');
$mod = JModuleHelper::getModule('mod_my_module');
 
var_dump($mod);
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #14 : 04.03.2016, 02:02:44 »

и
А у вас модуль опубликован в админке?
Если опубликован то стоит ли отображение во всех пунктах меню?
Если стоит отображать только на какой то конкретной странице,  то естественно модуль не отобразиться!
Что бы отобразился передайте ему index.php?option=com_ajax&module=mymodule&format=debug8Itemid=123, где 123 - это id пункта меню к которому привязан модуль!
Но насколько я помню в аяксовый модуль параметры все равно не передаются! нужно самому их получить!
Модуль опубликован только на главной, по примеру с Itemid выводит уже другое
Код:
Метод getListAjax не существует
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #15 : 04.03.2016, 02:09:38 »

значит у вас в модуле в helper.php нет:
static function getListAjax(){
}
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7738



« Ответ #16 : 04.03.2016, 02:15:57 »

ТС, не могу понять, вы модуль и com_ajax используете, или все таки в отдельном файле 1.php фреймворк Joomla подключаете?
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #17 : 04.03.2016, 02:17:39 »

значит у вас в модуле в helper.php нет:
static function getListAjax(){
}

есть
Код
	static function getListAjax()
{
$app = JFactory::getApplication();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
...........
Правильно ли назван class ? modMy_moduleHelper. Там класс тоже должен по определённому называться...
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #18 : 04.03.2016, 02:18:07 »

ТС, не могу понять, вы модуль и com_ajax используете, или все таки в отдельном файле 1.php фреймворк Joomla подключаете?
Подозреваю что ТС пытается com_ajax использовать, но так как никто не сказал ему что ошибка в начале связанная с тем что не передает Itemid, то он скорее всего попытался пойти другим путем!
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #19 : 04.03.2016, 02:18:26 »

ТС, не могу понять, вы модуль и com_ajax используете, или все таки в отдельном файле 1.php фреймворк Joomla подключаете?
com_ajax ! Но когда он мне ничего не выдал, я решил проверить на отдельном файле, изначально нужно для аякса

Подозреваю что ТС пытается com_ajax использовать, но так как никто не сказал ему что ошибка в начале связанная с тем что не передает Itemid, то он скорее всего попытался пойти другим путем!
точно ! Просто не хочу писать отдельный плагин для аякса, если есть нужный helper в модуле.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #20 : 04.03.2016, 02:19:01 »

Правильно ли назван class ? modMy_moduleHelper. Там класс тоже должен по определённому называться...
Неправильно! Назовите класс modMymoduleHelper, нижнее подчеркивание низя )
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7738



« Ответ #21 : 04.03.2016, 02:22:34 »

ModMyModuleHelper

опоздал Azn

нижнее подчеркивание низя )
и тире тоже
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #22 : 04.03.2016, 02:27:58 »

и тире тоже
как бы в именовании нельзя вообще использовать тире..
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7738



« Ответ #23 : 04.03.2016, 02:30:26 »

я не против Azn но для чего то сделали ж...

Показать текстовый блок
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #24 : 04.03.2016, 02:32:52 »

я не против Azn но для чего то сделали ж...
а в Joomla много сделано того чего делать не стоит...
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #25 : 04.03.2016, 02:35:28 »

Такс, отлично работает всё, осталось только передать нужные параметры через com_ajax
У меня getListAjax($params)
Пробовал в GET передать params=json_format
Не работает.
Код
$("div.btn-small").on('click', function() {
$.ajax({
  method: "GET",
  url: "index.php",
  data: { option: "com_ajax", module: "my_module", format: "debug" , method: "getList", Itemid: "101", params: '<?php echo json_encode($params); ?>'}
}).done(function( msg ) {
//alert( msg );
$('.btn-small').html(msg);
});
});
 
« Последнее редактирование: 04.03.2016, 02:38:35 от Wertos » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

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



« Ответ #26 : 04.03.2016, 02:37:58 »

не надо ничего передавать, получите прямо в методе:

Код
$module = JModuleHelper::getModule( 'mod_mymodule', 'Тайт модуля в админке' );
$params = new JRegistry( $module->params );
print_r( $params );
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7738



« Ответ #27 : 04.03.2016, 02:40:50 »

Цитировать
а в Joomla много сделано того чего делать не стоит...
бывает Azn кстати судя по коду, название модуля my_super-module приведет к не совсем очевидному поведению Azn
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #28 : 04.03.2016, 02:44:08 »

не надо ничего передавать, получите прямо в методе:

Код
$module = JModuleHelper::getModule( 'mod_mymodule', 'Тайт модуля в админке' );
$params = new JRegistry( $module->params );
print_r( $params );
У меня их на главной 3шт. И каждый с разными параметрами. Т.е. по клику на кнопке идёт подгрузка материалов по параметрам, разным для каждого модуля. Соответственно в метод надо передать хотя-бы $module->title
Записан
Wertos
Завсегдатай
*****

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

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


« Ответ #29 : 04.03.2016, 02:57:56 »

Код
$name = JRequest::getVar('name');
$module = JModuleHelper::getModule( 'mod_my_module',  $name);
$params = new JRegistry( $module->params );
 
Всё отлично ! Заработало как нужно ! Спасибо всем огромное.
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | 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