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

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

Зависимость модуля от компонента и страницы

 (Прочитано 216 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« : 15.06.2017, 12:19:29 »

Здравствуйте, форумчане!
Создаю расширение для J3. Есть компонент с достаточно развитой админкой. И ещё к должен быть модуль, который должен отображаться на некоторых страницах. Вопрос по модулю.
Внешний вид модуля зависит от страницы, на которой он выводится, потому в модуль надо как-то передать параметр.
XML-файл не подходит, так как страницы могут изменяться, и делается это как раз в админке компонента.
Как в модуль передать такой параметр?
Например, для одной страницы 'param' => 'page1', а для другой страницы  'param' => 'page2'.
Записан
robert
Профи
********

Репутация: +380/-14
Offline Offline

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


« Ответ #1 : 15.06.2017, 12:42:56 »

Код
<?php
$class = '';
 
if (JUri::current() == 'страница1') {
$class = ' class="page1"';
} elseif (JUri::current() == 'страница2') {
$class = ' class="page2"';
}
?>
<div <?php echo $class; ?>>
...
</div>
 
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #2 : 15.06.2017, 13:10:54 »

Код
<?php
$class = '';
 
if (JUri::current() == 'страница1') {
$class = ' class="page1"';
} elseif (JUri::current() == 'страница2') {
$class = ' class="page2"';
}
?>
<div <?php echo $class; ?>>
...
</div>
 
Немного не то.
В Админке компонента админ задает некий параметр для страницы, который нужно передать модулю.
А Вашем варианте после каждой новой добавленной страницы, нужно будет переписывать модуль.
Записан
robert
Профи
********

Репутация: +380/-14
Offline Offline

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


« Ответ #3 : 15.06.2017, 13:29:33 »

Код
jimport('joomla.application.component.helper');
$page1 = JComponentHelper::getParams('com_mycomponent')->get('page1');
 
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #4 : 15.06.2017, 13:51:39 »

Код
jimport('joomla.application.component.helper');
$page1 = JComponentHelper::getParams('com_mycomponent')->get('page1');
 
Тоже не то. Как получить данные модулем я понимаю, он всегда может получить это из базы данных, но как заставить модуль понять на какой странице он находится?
Допустим, модуль отображает скидку на товар.
В админке задается группа товаров на которые дается скидка.
Когда загружается страница с товаром модуль должен определить входит ли он в группу товаров со скидкой.
Если скидка есть, то модуль отображает скидку, если скидки сейчас нет, то он вообще не отображается.
Записан
robert
Профи
********

Репутация: +380/-14
Offline Offline

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


« Ответ #5 : 15.06.2017, 14:14:36 »

Немного не то.
Тоже не то.
Мы играем в "угадайку"?
Сначала
Внешний вид модуля зависит от страницы, на которой он выводится, потому в модуль надо как-то передать параметр.
Теперь
Когда загружается страница с товаром модуль должен определить входит ли он в группу товаров со скидкой.
Если скидка есть, то модуль отображает скидку, если скидки сейчас нет, то он вообще не отображается.
Так это входит в функционалы модуля, напишите его. Все у вас есть: данные из компонента, из модуля, из БД, в конце концов. Это вы или я
Создаю расширение для J3.
?
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #6 : 15.06.2017, 14:46:16 »

Мы играем в "угадайку"?
Я с самого начала сказал, что внешний вид модуля зависит от страницы. Ниже уточнил, что если модуль входит в одну группу, то отображается, если не входит, то не отображается. Чтобы модулю понять как ему выглядеть, он должен получить параметр.
Все у вас есть: данные из компонента, из модуля, из БД, в конце концов.
Модуль может получить из базы все параметры. Но как ему определить к какой странице он относится, чтобы получить нужные параметры именно для этой страницы? Использовать URL страницы не вариант, так как сам URL страницы может измениться, да и модуль не сможет адаптироваться под новые страницы, которые появятся позже.
Для этого вижу только один способ - передать параметр модулю при подключении. Вопрос как это сделать?
Записан
robert
Профи
********

Репутация: +380/-14
Offline Offline

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


« Ответ #7 : 15.06.2017, 15:00:50 »

Опять в "угадайку"?
если модуль входит в одну группу, то отображается, если не входит, то не отображается.
Но как ему определить к какой странице он относится, чтобы получить нужные параметры именно для этой страницы?
Что за группы, в которые модуль должен входить?
Вы сами-то можете определить, какие страницы вам нужны?
Конкретные детали и критерии нужны, а не какие-то общие слова.
Записан
dmitry_stas
Профи
********

Репутация: +925/-6
Offline Offline

Сообщений: 9772



« Ответ #8 : 15.06.2017, 15:16:27 »

ничего модулю передавать не нужно. модуль на то и модуль, чтобы сам решать что ему делать.

Цитировать
как ему определить к какой странице он относится, чтобы получить нужные параметры именно для этой страницы?
что такое в вашем понимании "к какой странице"?
Код:
$app = JFactory::getApplication();
echo $app->input->getString('option');
echo $app->input->getString('view');
echo $app->input->getString('task');
и так далее.
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #9 : 15.06.2017, 15:34:23 »

Что за группы, в которые модуль должен входить?
Вы сами-то можете определить, какие страницы вам нужны?
Конкретные детали и критерии нужны, а не какие-то общие слова.
Админ создает страницу (материал html) и хочет подключить модуль к странице
{mod_mymodule}
Если он хочет чтобы модуль выглядел в одну колонку, пишет например,
{mod_mymodule:param=view_1}
Если хочет чтобы он выглядел в две колонки, пишет
{mod_mymodule:param=view_2}
Если модуль должен подгрузить особые данные
{mod_mymodule:param=view_2,data=data_1}
Если другие данные
{mod_mymodule:param=view_1,data=data_2}
Если при этом возможна ситуация, что данные data_2 имеют статус показывать только определенному региону и регион посетителя сайта не совпадает, то модуль вообще не показывается.
Как передать модулю параметры?
Записан
dmitry_stas
Профи
********

Репутация: +925/-6
Offline Offline

Сообщений: 9772



« Ответ #10 : 15.06.2017, 15:50:36 »

никак. модуль на то и модуль, чтобы сам решать. принцип модульности как раз и заключается в независимости от внешних факторов. а вы хотите его нарушить.
Цитировать
Если он хочет чтобы модуль выглядел в одну колонку
то значит создает модуль, в котором указывает настройки вывода в одну колонку, и этот модуль выводит в материале.
Цитировать
Если хочет чтобы он выглядел в две колонки
то значит создает модуль, в котором указывает настройки вывода в две колонки, и этот модуль выводит в материале.
Цитировать
Если модуль должен подгрузить особые данные
то значит что то пошло не так. модуль не может знать обо всех вероятных "особых данных", которые захотят ему подсунуть в качестве параметра. соответственно, работа модуля при таком раскладе не гарантируется. и именно поэтому - модуль сам решает, что он выводит.

чисто теоретически сделать то, что вы хотите, возможно. пишем свой плагин группы content, который будет обрабатывать вставки вида
Код:
{mod_mymodule:param=view_2}
и т.п. и даем в описании, как именно вставлять модуль в материал. но это не будет правильным решением.
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #11 : 15.06.2017, 15:51:30 »

ничего модулю передавать не нужно. модуль на то и модуль, чтобы сам решать что ему делать.
А если требуется изменять внешний вид модуля в зависимости от того к какой группе относится тот или иной товар?
Допускаю, что значит неправильно выбрал, и нужно было создавать не модуль, а компонент, туда параметры передается элементарно (option,view,task). Но я не представляю, как компонент разместить внутри материала HTML.
Можно компонент установить как модуль для всех товаров определенной категории?
Записан
dmitry_stas
Профи
********

Репутация: +925/-6
Offline Offline

Сообщений: 9772



« Ответ #12 : 15.06.2017, 15:56:47 »

как и сказал уже robert, мы играем в угадайку. это очень увлекательная игра, не спорю. но может быть все таки вы расскажете что вы хотите получить на выходе? обычным русским языком, просто расскажите идею. а то от фразы
Можно компонент установить как модуль для всех товаров определенной категории?
начинает глаз дергаться Azn
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #13 : 15.06.2017, 16:20:08 »

как и сказал уже мы играем в угадайку. это очень увлекательная игра, не спорю. но может быть все таки вы расскажете что вы хотите получить на выходе? обычным русским языком, просто расскажите идею. а то от фразыначинает глаз дергаться Azn
На странице товаров нужен блок, который динамически может менять свой вид в зависимости от того, на какой странице он расположен.
Например, на странице утюгов, в этом боке будет предложен другой утюг со скидкой, если такой есть. Этот блок будет отображаться в одну колонку.
А на странице стиральных машин, покажется стиральная машина по более выгодной цене, если такая есть. Этот блок в две колонки.
А на странице телефонов в этом блоке предлагаются уже сопутствующие товары.
Возможно это не модуль по логике, а компонент, но как его вставить сразу на группу товаров как часть окончательной страницы сайта?
Записан
dmitry_stas
Профи
********

Репутация: +925/-6
Offline Offline

Сообщений: 9772



« Ответ #14 : 15.06.2017, 16:43:37 »

это обычный модуль. все так, как я и говорил, ничего нового. создаете модуль, в его настройках выбираете Категория на которой он будет выводится, может быть тоже Производитель, принцип вывода (сопутки, похожие, близкие по цене товары этого же производителя, и т.д. что там еще у вас), и так далее. все настройки - внутри модуля. таким образом создаете все нужные модули с разными параметрами вывода, все их публикуете в одной позиции. далее модули загружаются и сами смотрят на свои параметры, понимают соответствуют ли они условиям вывода, и что-то выводят (по выбранным в своих настройках параметрам - шаблон для 2/3/123 колонок, и т.п.) либо ничего не выводят.
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #15 : 15.06.2017, 16:51:55 »

это обычный модуль. все так, как я и говорил, ничего нового. создаете модуль, в его настройках выбираете Категория на которой он будет выводится, может быть тоже Производитель, принцип вывода (сопутки, похожие, близкие по цене товары этого же производителя, и т.д. что там еще у вас), и так далее. все настройки - внутри модуля. таким образом создаете все нужные модули с разными параметрами вывода, все их публикуете в одной позиции. далее модули загружаются и сами смотрят на свои параметры, понимают соответствуют ли они условиям вывода, и что-то выводят (по выбранным в своих настройках параметрам - шаблон для 2/3/123 колонок, и т.п.) либо ничего не выводят.
То есть я правильно понял, что для утюгов нужен "Модуль-Утюги", для стиральных машин создаем уже модуль "Стиральные машины". Для телефонов Самсунг создаю модуль "Сопутствующие товары для Самсунга" и так далее для всех 174 (пока что) категорий?
Неужели нет более простого способа?
Записан
dmitry_stas
Профи
********

Репутация: +925/-6
Offline Offline

Сообщений: 9772



« Ответ #16 : 15.06.2017, 16:58:19 »

каков по вашему мнению более простой способ? если мы говорим только о сопутствующих для текущего товара - то это 1 модуль, а не 174. модуль понимает, что он находится на странице товара, и выводит для этого товара сопутки. и не важно какой товар - это всегда сопутки. но вы же ведете речь о разных условиях вывода. и какой более просто способ вы видите? искусственный интеллект? Azn модуль сам догадается, что в Утюги вы хотите вывести другие утюги (т.е. скажем условие - товары этой же категории), а в Стиральные машины при этом предложить стиральный порошок (т.е. совсем другое условие)? Azn
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #17 : 15.06.2017, 17:00:28 »

То есть я правильно понял, что для утюгов нужен "Модуль-Утюги", для стиральных машин создаем уже модуль "Стиральные машины". Для телефонов Самсунг создаю модуль "Сопутствующие товары для Самсунга" и так далее для всех 174 (пока что) категорий?
Ну, а если у вас на все 174 категории нужно разное отображение модуля?!


Неужели нет более простого способа?
Есть... изобрасти скайнет он будет сам догадываться какую разметку в какой категории вывести, скрипты увы это не умеют (
Записан
robert
Профи
********

Репутация: +380/-14
Offline Offline

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


« Ответ #18 : 15.06.2017, 17:02:23 »

Фу, после допроса с пристрастиями наконец-то выдернули из вас самые тайные мысли Azn.
Если одновременно выводится только 1 копия модуля, то не нужно создавать много модулей. Вместо этого создайте много параметров, которые будут указывать модулю, что показывать в конкретных случаях:
- Категория "Утюги": 1 колонка из 5 утюгов
- Категория "Стриральная машина": играть гимн Гвинеи-Биссау, 2 колонки вымытых обезьянок
и т.д.
P.S. Параметры, точнее, наборы параметров, можно создавать по мере необходимости, а в один набор можно включить несколько категорий.
« Последнее редактирование: 15.06.2017, 17:10:24 от robert » Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #19 : 15.06.2017, 17:05:49 »

Если одновременно выводится только 1 копия модуля, то не нужно создавать много модулей.
Мне кажется лучше уж настройки для подобного задавать сразу в категории, а модулю считывать уже из категории эти настройки!
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #20 : 15.06.2017, 17:08:10 »

Ну, а если у вас на все 174 категории нужно разное отображение модуля?!
Ну как минимум заголовок у каждого будет свой.
Есть... изобрасти скайнет он будет сам догадываться какую разметку в какой категории вывести, скрипты увы это не умеют (
Зачем догадываться. В базе данных есть, что для таких товаров одно представление, для других другое. Для этих товаров есть скидка, а для этих нет. А такой-то товар уже кончился и на складе его нет, а такой-то товар - это новинка в данной категории.
И эти данные я могу получить из базы, но модулю надо знать на какой странице он находится в данный момент, чтобы определить категорию.
Записан
dmitry_stas
Профи
********

Репутация: +925/-6
Offline Offline

Сообщений: 9772



« Ответ #21 : 15.06.2017, 17:11:24 »

тупик Azn ну так получите категорию в модуле Azn
Код:
echo JFactory::getApplication()->input->getInt('category_id');
или что у вас там за id категории отвечает. как компонент называется? это интернет-магазин какой-то?
Записан
robert
Профи
********

Репутация: +380/-14
Offline Offline

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


« Ответ #22 : 15.06.2017, 17:20:41 »

Мне кажется лучше уж настройки для подобного задавать сразу в категории, а модулю считывать уже из категории эти настройки!
Наверное, только непонятно, что за компонент и позволяет ли он это делать. В любом случае надо будет брать настройки из REQUEST или сессии, в общем, не быстрая история.
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #23 : 15.06.2017, 17:28:52 »

тупик Azn ну так получите категорию в модуле Azn
Да тоже не вариант, тут завязано не столько на категорию, сколько на группу. Товар может входить в категорию "утюги", но может также входить в группу "новинки" и тогда эта группа более приоритетная, а может входить в группу "скидки". При этом как-то нужно еще задать в админке, что для утюгов показывать группу "скидки", а для стиральных машин группу "новинки".
В том то и дело, что внутри даже одной категории может быть разное отображение модуля, зависит от конкретного товара и его группы.
« Последнее редактирование: 15.06.2017, 17:33:57 от Тренд » Записан
robert
Профи
********

Репутация: +380/-14
Offline Offline

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


« Ответ #24 : 15.06.2017, 17:46:34 »

Создаю расширение для J3
Немного не то
Тоже не то
Да тоже не вариант
Мне кажется, что вы хотите нашими силами создать с нуля свой модуль. Я не прав?
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #25 : 15.06.2017, 17:51:26 »

Мне кажется, что вы хотите нашими силами создать с нуля свой модуль. Я не прав?
Нет, он уже создан. Но он у меня работает пока только на одной странице. Чтобы он работал на других страницах мне нужно передать ему параметры. Собственно именно в этом и заключался вопрос, как передаются параметры в модуль. Мне уже объяснили, что это не возможно, мне больше ничего больше и не нужно. Буду решать задачу по-другому.
Записан
b2z
Support Team
*****

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

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


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


« Ответ #26 : 15.06.2017, 18:16:45 »

Цитировать
При этом как-то нужно еще задать в админке, что для утюгов показывать группу "скидки", а для стиральных машин группу "новинки".]При этом как-то нужно еще задать в админке, что для утюгов показывать группу "скидки", а для стиральных машин группу "новинки".
Если это самопис, то почему не передать параметры через URL? Или передать параметры в REQUEST из плагина?
« Последнее редактирование: 15.06.2017, 18:21:25 от b2z » Записан
dmitry_stas
Профи
********

Репутация: +925/-6
Offline Offline

Сообщений: 9772



« Ответ #27 : 15.06.2017, 18:20:20 »

Цитировать
Да тоже не вариант, тут завязано не столько на категорию, сколько на группу. Товар может входить в категорию "утюги", но может также входить в группу "новинки"
да все вариант. не понятно, в чем проблема получить одновременно и группу (знать бы что это), и категорию. и проверяйте себе на здоровье что там кому задано и что более приоритетное. вообще не вижу сложностей. по-моему вы сами себя путаете.
Записан
b2z
Support Team
*****

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

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


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


« Ответ #28 : 15.06.2017, 18:21:36 »

Чисто фантазирую - сделать контент плагин, распарсить теги типа {mod_mymodule:param=view_1} и передать всё в REQUEST?
Записан
Тренд
Осваиваюсь на форуме
***

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

Сообщений: 59


« Ответ #29 : 15.06.2017, 18:51:08 »

Чисто фантазирую - сделать контент плагин, распарсить теги типа {mod_mymodule:param=view_1} и передать всё в REQUEST?
На этом варианте и остановился. Так сделать проще, чем создавать 174 модуля с уникальными заголовками Azn
Всем спасибо за ответы!
Записан
Страниц: [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