PDA

Zobacz pełną wersję : Wywołanie modułu JModuleHelper::renderModule



robak142
19-01-2016, 19:51
Mam problem z wywołaniem modułu w pluginie.
Wykorzystuję:

jimport( 'joomla.application.module.helper' );
$attribs['style'] = 'xhtml';
$module=JModuleHelper::renderModule( 'login', $attribs )
//efekt
echo '<pre>';
print_r( $module );
echo '</pre>';

Działa dla części modułów, np dla menu oraz login, ale sporej części nijak nie mogę wywołać.
Macie jakieś pomysły?

moje
19-01-2016, 21:45
A gdzie getModule?

To Cie zainteresuje: https://docs.joomla.org/JModuleHelper/renderModule
A to tak przy okazji: https://docs.joomla.org/JModuleHelper/getModule

robak142
19-01-2016, 22:17
Czytałem, nie zawracałbym gitary.
Konkretnie. Dlaczego to działa:


$attribs['style'] = 'xhtml';
$modules = JModuleHelper::getModule( 'custom');
$module=JModuleHelper::renderModule( $modules, $attribs );

print_r( $module );



... a to nie:


$attribs['style'] = 'xhtml';
$modules = JModuleHelper::getModule( 'custom', 'blue');
$module=JModuleHelper::renderModule( $modules, $attribs );

print_r( $module );


Oczywiście @moje MAM moduł custom o nazwie blue.

moje
19-01-2016, 22:26
Pozwolę sobie na bycie odrobinę wrednym: Bo kod jest niepoprawny ;)

A tak na serio, jak to czytałeś, to znasz odpowiedź na swoje pytanie.

Zastanawia mnie jedno, skoro masz działający kod, to czemu go nie używasz tylko jakiejś modyfikacji kodu, który nie działa.

robak142
19-01-2016, 22:40
To może pomożesz go upoprawnić bo czytam i wymiękam. Potknąłem się o to i tracę czas.
Zerżnięte z dokumentacii https://docs.joomla.org/JModuleHelper/renderModule
działa:

jimport( 'joomla.application.module.helper' );
$module = JModuleHelper::getModule( 'custom');
$attribs['style'] = 'xhtml';
echo JModuleHelper::renderModule( $module, $attribs );


nie działa

jimport( 'joomla.application.module.helper' );
$module = JModuleHelper::getModule( 'custom', 'blue');
$attribs['style'] = 'xhtml';
echo JModuleHelper::renderModule( $module, $attribs );

moje
19-01-2016, 23:02
Wyjaśnienie jest również w dokumentacji.

Do metody getModule przekazujesz tylko jeden argument. Więc podanie więcej jak jednego argumentu powoduje błąd.
Skąd założenie, że błędny kod będzie działał?

robak142
19-01-2016, 23:10
czyli kod z https://docs.joomla.org/JModuleHelper/getModule

jimport( 'joomla.application.module.helper' );
$module = JModuleHelper::getModule( 'mainmenu', 'Key Concepts' );
$attribs['style'] = 'xhtml';
echo JModuleHelper::renderModule( $module, $attribs );
jest błędny? Są tam 2 argumenty, czy ja coś omijam?

moje
19-01-2016, 23:17
Przepraszam, pomyliłem z getModules, tam jest tylko jeden argument.

Masz moduł z tytułem 'blue'?

robak142
19-01-2016, 23:19
napisałem w 2 poście. Oczywiście, że mam moduł custom o nazwie blue.

moje
19-01-2016, 23:23
Jego tytuł jest z małej, a nie z dużej litery?

Próbowałeś mod_custom zamiast custom?

robak142
19-01-2016, 23:48
Wszystko jest jak być powinno.
Wg mnie, po przeczytaniu dokumentacji, pozycja menu nie ma żadnego znaczenia. Mylę się?

moje
20-01-2016, 00:00
Jeśli moduł jest przypisany do danej pozycji, to plugin nie wywoła na pozostałych stronach.

robak142
20-01-2016, 00:05
Podrzucam ponownie. Czy to jakiś bug z mod_custom, bo mod_menu reaguje na nazwę. Czy ktoś się z tym spotkał?
Potrzebuję wyrenderować jeden z modułów custom. Wg w/w np custom, blue.

moje
20-01-2016, 00:09
Masz więcej modułów custom? Gdzieś jeszcze jest tytuł blue?

EDIT:

Czy ten moduł jest na pewno włączony?

EDIT 2:

I czy jest on przypisany do jakiekolwiek pozycji?

robak142
20-01-2016, 00:22
Faktycznie przypisane pozycje menu, grają tu rolę. Zacząłem tym manipulować i wreszcie coś widzę.

moje
20-01-2016, 00:28
Tak z ciekawości. To czy wpinacz modułów (loadmodule), dodatek wbudowany w Joomla, nie nadaje się do tego, co chcesz zrobić?

robak142
20-01-2016, 00:38
Nie nadaje się. Piszę zestaw pluginów i muszę renderować moduły na poziomie kodu plugina. Z dokumentacji wywnioskowałem, że przy renderowaniu modułu pozycja menu nie ma znaczenia, ale jednak jest inaczej. Posunąłem się naprzód. Pomogłeś. Dzięki.

moje
20-01-2016, 00:46
W dokumentacji jest napisane, że ma znaczenie.

Za https://docs.joomla.org/JModuleHelper/getModule

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.

W końcu przed renderowaniem musisz pobrać zawartość modułu.