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

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

Создание модуля для своего компонента подгрузкой данных по AJAX

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

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

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



« : 15.09.2016, 19:57:11 »

Необходимо вывести данные из БД в модуль как на картинке:



тело файла манифеста:
Код
<?xml version="1.0"?>
<extension type="module" version="1.0.0" method="upgrade" client="site">
   <name>MODULE_MYCOMP_CATEGORY_OBJECT_VIEW</name>
   <author></author>
   <authorEmail></authorEmail>
   <authorUrl></authorUrl>
   <copyright></copyright>
   <license></license>
   <version>1.0</version>
   <description>MOD_MYCOMP_CATEGORY_OBJECT_VIEW_DESC</description>
   <files>
       <filename module="mod_mycomp_category_object_view">mod_mycomp_category_object_view.php</filename>
       <filename>index.html</filename>
       <filename>helper.php</filename>
       <folder>tmpl</folder>
   </files>
<languages>
<language tag="en-GB">language/en-GB.mod_mycomp_category_object_view.ini</language>
<language tag="en-GB">language/en-GB.mod_mycomp_category_object_view.sys.ini</language>
<language tag="ru-RU">language/ru-RU.mod_mycomp_category_object_view.ini</language>
<language tag="ru-RU">language/ru-RU.mod_mycomp_category_object_view.sys.ini</language>
</languages>
   <config>
       <fields name="params">
           <fieldset name="basic">
<field
name="city"
type="category"
label="MOD_MYCOMP_CATEGORY_OBJECT_VIEW_CITY"
required="false"
default="0"
published="true"
class=""
extension="com_mycomp"
multiple="false">

</field>
<field
name="district"
type="category"
label="MOD_MYCOMP_CATEGORY_OBJECT_VIEW_DISTRICT"
required="false"
default="0"
published="true"
class=""
extension="com_mycomp"
multiple="true">

</field>
<field
name="category"
type="category"
label="MOD_MYCOMP_CATEGORY_OBJECT_VIEW_CATEGORY"
required="false"
default="0"
published="true"
class=""
extension="com_mycomp"
multiple="false">

</field>
<field
name="subcategory"
type="category"
label="MOD_MYCOMP_CATEGORY_OBJECT_VIEW_SUBCATEGORY"
required="false"
default="0"
published="true"
class=""
extension="com_mycomp"
multiple="true">

</field>
<field
name="count"
type="text"
label="MOD_MYCOMP_CATEGORY_OBJECT_VIEW_COUNT"
required="false"
default="25"
size="10"
class=""
readonly="false"
disabled="false"
filter="">

</field>
           </fieldset>
           <fieldset name="advanced">
               <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL"
                      description="JFIELD_ALT_MODULE_LAYOUT_DESC"/>

               <field name="moduleclass_sfx" type="text" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
                      description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC"/>

               <field name="cache" type="list" label="COM_MODULES_FIELD_CACHING_LABEL"
                      description="COM_MODULES_FIELD_CACHING_DESC" default="1">

                   <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
                   <option value="1">JGLOBAL_USE_GLOBAL</option>
               </field>
           </fieldset>
       </fields>
   </config>
</extension>
 

Вопрос, что и как реализовать в файле helper.php для осуществления задуманного?

В интернете информацию нашел как просто вносить какие-то незначительные настройки.
Например данные в поле текст и потом использовать их в коде PHP конструкцией
$params->get('ИМЯ ПОЛЯ В ФАЙЛЕ МАШИФЕСТА');
« Последнее редактирование: 15.09.2016, 20:01:02 от john.deff » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #1 : 15.09.2016, 20:46:30 »

У вас там компонент или модуль? Для модуля надо создавать кастомный тип поля и там вешать обработчики на списки. В компоненты вы их можете и во вьюхе добавить. А AJAX запросы нужно слать на контроллер, какой смысл хелпер подключать еще для этого? Можно вообще без AJAX запросов это все реализовать если данных немного.
Записан
john.deff
Осваиваюсь на форуме
***

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

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



« Ответ #2 : 15.09.2016, 23:33:45 »

У вас там компонент или модуль?
Вопрос про модуль

Для модуля надо создавать кастомный тип поля и там вешать обработчики на списки. В компоненты вы их можете и во вьюхе добавить. А AJAX запросы нужно слать на контроллер, какой смысл хелпер подключать еще для этого? Можно вообще без AJAX запросов это все реализовать если данных немного.
Можно пример -> кастомный тип поля и там вешать обработчики на списки ?

В компоненте как слать AJAX запросы знаю, но в модуле используется файл манифеста (XML) для настроек, и вот в этом у меня ступор,
я не понимаю какие конструкции API Joomla использовать и что куда летит.
как брать выбранные значения из файла манифеста (XML) я понимаю $params->get('ИМЯ ПОЛЯ В ФАЙЛЕ МАШИФЕСТА');
но как отдать результат работы в файл манифеста (XML) я реально не понимаю, не переписывать же его с помощью PHP с целью обновления данных
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #3 : 15.09.2016, 23:43:48 »

Практически то что вам надо: http://inet-reklama.com/blog/joomla/sozdanie-dinamicheskogo-polya-formy-dlya-v-joomla-3-2.html
Записан
robert
Профи
********

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

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


« Ответ #4 : 15.09.2016, 23:54:38 »

В компоненте как слать AJAX запросы знаю, но в модуле используется файл манифеста (XML) для настроек, и вот в этом у меня ступор,
Дело не в файле  манифеста, а в своем типе поля.
Откуда вы взяли, что можно
отдать результат работы в файл манифеста (XML)
и как можно
переписывать же его с помощью PHP с целью обновления данных
?
XML только указывает, какие поля и в каком порядке нужно выводить. Он такой же язык разметки, как и HTML. Он не может обрабатывать данные.
я не понимаю какие конструкции API Joomla использовать и что куда летит.
Для начала забудьте о Joomla API. Вы можете реализовать свои задумки без Joomla API?
Записан
john.deff
Осваиваюсь на форуме
***

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

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



« Ответ #5 : 16.09.2016, 00:31:08 »


Спасибо! читаю!
 в Вашем сервисе по созданию каркасов модулей, компонентов увидел множество джумловских полей, а что за что отвечает не понятно!
было бы круто сделать видео урок с рассказом какой тип поля за что отвечает и разместить на ютубе. Само видео как урок, разместить снизу формы создания каркаса.
И Вашему сервису реклама и пользователям простота в изучении данной темы
Записан
Septdir
Живу я здесь
******

Репутация: +35/-3
Offline Offline

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


Skype: septdir


« Ответ #6 : 16.09.2016, 00:41:14 »

Спасибо! читаю!
 в Вашем сервисе по созданию каркасов модулей, компонентов увидел множество джумловских полей, а что за что отвечает не понятно!
было бы круто сделать видео урок с рассказом какой тип поля за что отвечает и разместить на ютубе. Само видео как урок, разместить снизу формы создания каркаса.
И Вашему сервису реклама и пользователям простота в изучении данной темы
https://docs.joomla.org/Standard_form_field_types - 'это все стандартные поля с описанием,
Istaan, зачетная статья вот на пару месяцев пораньше бы =)
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #7 : 16.09.2016, 01:44:27 »

Istaan, зачетная статья вот на пару месяцев пораньше бы =)
пару месяцев назад я сам такое не умел ))


Спасибо! читаю!
 в Вашем сервисе по созданию каркасов модулей, компонентов увидел множество джумловских полей, а что за что отвечает не понятно!
Ну как бы так просто в сервисе трудно рассписать..

было бы круто сделать видео урок с рассказом какой тип поля за что отвечает и разместить на ютубе. Само видео как урок, разместить снизу формы создания каркаса.
И Вашему сервису реклама и пользователям простота в изучении данной темы
увы не с моим голосом и дикцией (
Записан
Septdir
Живу я здесь
******

Репутация: +35/-3
Offline Offline

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


Skype: septdir


« Ответ #8 : 16.09.2016, 13:45:47 »

пару месяцев назад я сам такое не умел ))
Кстати не в курсе как сделать поле типа media без использования XML, в Jhtml его нету, а все что нашел это старый гайд, где через js к полю подключают медиа менеджер, можно и так конечно, но не хотелось бы ибо чует моя пятая точка что можно по другому.
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #9 : 16.09.2016, 13:54:48 »

Кстати не в курсе как сделать поле типа media без использования XML, в Jhtml его нету, а все что нашел это старый гайд, где через js к полю подключают медиа менеджер, можно и так конечно, но не хотелось бы ибо чует моя пятая точка что можно по другому.
А что мешает использовать XML?)
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #10 : 16.09.2016, 14:06:19 »

Маленький лайф хак для вас:
Код
$form = JForm::getInstance( 'jform', '<form><fieldset><field name="image" type="media" label="Изображение"/></fieldset></form>', [ 'control' => '' ] );
echo $form->getInput( 'image' );

Вставка значение в поле:
Код
$form->bind( [ 'image' => 'Путь к картинке' ] );

 Wink
« Последнее редактирование: 16.09.2016, 14:09:43 от Istaan » Записан
Septdir
Живу я здесь
******

Репутация: +35/-3
Offline Offline

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


Skype: septdir


« Ответ #11 : 16.09.2016, 15:52:14 »

Маленький лайф хак для вас:
Код
$form = JForm::getInstance( 'jform', '<form><fieldset><field name="image" type="media" label="Изображение"/></fieldset></form>', [ 'control' => '' ] );
echo $form->getInput( 'image' );

Вставка значение в поле:
Код
$form->bind( [ 'image' => 'Путь к картинке' ] );

 Wink
Мешает использовать один геморрой который я выдумал  за хак спасибо вечерком опробую.
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #12 : 16.09.2016, 16:48:16 »

Мешает использовать один геморрой который я выдумал  за хак спасибо вечерком опробую.
Это не хак ) Это абсолютно законное использование форм, просто не все знают что так можно   Wink
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #13 : 16.09.2016, 16:52:22 »

Это все костыли. Что мешает свой тип поля создать и реализовать там все задуманное?
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #14 : 16.09.2016, 17:35:59 »

Это все костыли. Что мешает свой тип поля создать и реализовать там все задуманное?
Где именно костыль? Это базовый функционал формы! и вы читали вот эту часть:
как сделать поле типа media без использования XML, в Jhtml его нету
То есть я сильно подозреваю что товарищу Septdir нужно где то без формы вывести поле медиа, и вы предлагаете сделать тип поля что бы вывести media? И как вы его выведите без XML?)
« Последнее редактирование: 16.09.2016, 17:42:39 от Istaan » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #15 : 16.09.2016, 17:42:42 »

Istaan, я посмотрел ваш пример зачем вы вобще такие невразумительные имена даете полям формы: setup][param2, setup][param2.
По моему точно такого же эффекта можно добаится если XML создать такого вида
Код
<form>
   <fields name="params">
       <fields name="setup">
           <field name="param1" type="list" label="Параметр 1 (var1)" default="1">
               <option value="0">JNO</option>
               <option value="1">JYES</option>
           </field>
           <field name="param2" type="text" label="Параметр 2 (var1)"></field>
       </fields>
   </fields>
</form>
 

Устанавливать значения для полей через:

Код
 $form->setValue( $key, 'params.setup', $value );
 

А группу можно получить через:

Код
$form->getGroup( 'params.setup' )
 

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

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

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



« Ответ #16 : 16.09.2016, 17:51:00 »

По моему тот же самый эффект только без изврата.
я пробовал группу в группе, не мог вывести группу в группе на отображение, через точку правда не пробовал, да и времени не было на выяснения, это банальный пример из рабочего проекта на который не было времени с эксперементами.. да и все же знать не могу я...

p.s. вот потому и пора завязывать писать статьи, и помогать на форуме.. никакой ни благодарности, только критика и упреки.. и безнаказанно боты которые угрожают другим пользователям минусы ставят.. форум уже не тот.. я помню года три назад кому то так влупил три минуса, так получил бан на три дня.. а тут глухо..
« Последнее редактирование: 16.09.2016, 17:54:54 от Istaan » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #17 : 16.09.2016, 17:55:20 »

Цитировать
я пробовал группу в группе, не мог вывести группу в группе на отображение, через точку правда не пробовал, да и времени не было на выяснения, это банальный пример из рабочего проекта на который не было времени с эксперементами.. да и все же знать не могу я...

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

Цитировать
p.s. вот потому и пора завязывать писать статьи, и помогать на форуме.. никакой ни благодарности, только критика и упреки.. и безнаказанно боты которые угрожают другим пользователям минусы ставят.. форум уже не тот.. я помню года три назад кому то так влупил три минуса, так получил бан на три дня.. а тут глухо..

Да уж не прибедняйтесь для многих ваши примеры полезны и многие их нахваливают. А критику стоит воспринимать во благо не в ущерб. Не стоит опускать руки из за этого. Не так много людей пишут полезные статьи для Joomla.

Цитировать
То есть я сильно подозреваю что товарищу Septdir нужно где то без формы вывести поле медиа, и вы предлагаете сделать тип поля что бы вывести media? И как вы его выведите без XML?)

А что ему мешает скопировать тупо HTML и скрипты которые выводят поле media?
« Последнее редактирование: 16.09.2016, 18:01:18 от zomby6888 » Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #18 : 16.09.2016, 18:00:33 »

А что ему мешает скопировать тупо HTML и скрипты которые выводят поле media?
Эм.. есть выбор написать три строки кода или самому написать то что реализовано в методе getInput класса JFormFieldMedia с 194 строки по 422.. вот это точно будет костыль...
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #19 : 16.09.2016, 18:02:25 »

Не написать а готовый HTML скопировать. Ну если надо добавить туда немного php. Зачем трогать JFormFieldMedia если на выхлопе там обычный HTML с полем и скриптами. Заменить может какие то аттрибуты php переменными и делов то.
« Последнее редактирование: 16.09.2016, 18:05:27 от zomby6888 » Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #20 : 16.09.2016, 18:04:18 »

Не написать а готовый HTML скопировать. Ну если надо добавить туда немного php.
и немного JS ) строк так с 50   Wink
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #21 : 16.09.2016, 18:07:59 »

и немного JS ) строк так с 50   Wink

Ну и че открываем исходный код браузера и ctr-c, ctrl-v нужный нам скриптик. И всего делов
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #22 : 16.09.2016, 18:09:50 »

Ну и че открываем исходный код браузера и ctr-c, ctrl-v нужный нам скриптик. И всего делов
а почему не вставить три строки   Smiley
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #23 : 16.09.2016, 18:15:48 »

Ну я бы сказал что там много всяких лишний инициализаций, типа парсинга XML и прочего, но это все мелочи. Вообщем кому как удобно конечно.
« Последнее редактирование: 16.09.2016, 18:20:25 от zomby6888 » Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #24 : 16.09.2016, 18:24:08 »

Ну я бы сказал что там много всяких лишний инициализаций, типа парсинга XML и прочего, но это все мелочи. Вообщем кому как удобно конечно.
ну как бы в то время когда идет инициализация целого движка парится о парсинге какого то XML в форме ))
Записан
Septdir
Живу я здесь
******

Репутация: +35/-3
Offline Offline

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


Skype: septdir


« Ответ #25 : 16.09.2016, 19:15:27 »

Это все костыли. Что мешает свой тип поля создать и реализовать там все задуманное?
Ну наверное потому что, мне надо поле сделать без XML... был бы вариант юзать XML я бы не парился). А копировать js + htlm и юзать в перемененной получиться индуский код(Ну тут на вкус и цвет конечно). Идеалом было бы конечно если бы меда поле была возможность выводить через  JHTML как это сделанно с тем же select.genericlist.

А  свои поля это удобная вещь, частенько пользуюсь.
« Последнее редактирование: 16.09.2016, 19:21:33 от Septdir » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #26 : 16.09.2016, 19:25:08 »

Цитировать
А копировать js + htlm и юзать в перемененной получиться индуский код

Ну тогда вся Joomla написана на индусском коде, потому что весь HTML и js для полей формы они хранят в переменной input JFormField класса. Зачем вам вообще этот media сдался? Полно в сети отличных плагинов для загрузки изображений. Он вообще написан для админки а не для фронта.
« Последнее редактирование: 16.09.2016, 19:31:54 от zomby6888 » Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #27 : 16.09.2016, 19:28:31 »

Ну наверное потому что, мне надо поле сделать без XML... был бы вариант юзать XML я бы не парился). А копировать js + htlm и юзать в перемененной получиться индуский код(Ну тут на вкус и цвет конечно). Идеалом было бы конечно если бы меда поле была возможность выводить через  JHTML как это сделанно с тем же select.genericlist.

А  свои поля это удобная вещь, частенько пользуюсь.
Приведенный мною пример считайте что JHTML только на 3 строки )
Записан
Septdir
Живу я здесь
******

Репутация: +35/-3
Offline Offline

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


Skype: septdir


« Ответ #28 : 16.09.2016, 19:31:50 »

Ну тогда вся Joomla написана на индусском коде, потому что весь HTML и js для полей формы они хранят в переменной input JFormField класса.
Ну где хранит движок, это мало меня запутит. Но посреди своего кода в котором 15-20 строк впихивать пласт кода, который к тому уже есть в движке это перебор. Зачем дублировать то что уже и так есть. Это как с тем же выпадающим списком, можно каждый раз писать select потом цикл на в котором задавать переменные для option. А можно просто написать
Код
JHTML::_('select.genericlist', $array, 'name', 'attributes', 'value', 'text', $value)
 
Результат один и тот же. кол-во усилий разное. Так что дело вкуса
Приведенный мною пример считайте что JHTML только на 3 строки )
Ну все же почти =) + тут знать о такой возможности надо
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #29 : 16.09.2016, 19:32:51 »

Ну так напишите себе HTML хелпер который будет нужные вам поля HTML отдавать как это делает JHTML. Статический класс со статическими методами. Обычная практика. Ваша проблема высосана из пальца. За это время я бы уже давно написал бы подобный метод
« Последнее редактирование: 16.09.2016, 19:37:56 от zomby6888 » Записан
Страниц: [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