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

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

[Решено] Автоматическое размешение модуля после установки

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

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

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


www.AsmuZ.ru


« : 21.07.2014, 18:36:45 »

Друзья! Нужна помощь... Возможно тема обсуждалась, но я не нашел. Суть вопроса такова, я написал небольшой модуль для админки Joomla 3 серии, он просто выводит иконки со ссылками на некоторые страницы. Я хочу, чтобы после инсталляции этого модуля, он АВТОМАТИЧЕСКИ был опубликован в позиции cpanel админки.

Ковырял инсталляторы, которые это умеют делать, но по аналогии запустить не получилось  Angry

Помогите разобраться  !

вот от чего я отталкиваюсь:

Код:
  <subinstall>    
<extension type="module" folder="system" dir="modules/admin/mod_poweradmin" name="mod_poweradmin" client="admin" publish="1" position="icon" title="JSN PowerAdmin Quick Icons" ordering="0" lock="0" />
    </subinstall>

Это прописано в XML инсталлятора.
Как видно, тут и модуль автоматически включаются после установки
« Последнее редактирование: 21.07.2014, 22:08:12 от b2z » Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #1 : 21.07.2014, 18:50:43 »

А через установочный скрипт разве нельзя модуль опубликовать?
Записан
asmuz
Осваиваюсь на форуме
***

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

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


www.AsmuZ.ru


« Ответ #2 : 21.07.2014, 18:51:53 »

А через установочный скрипт разве нельзя модуль опубликовать?
Может быть и можно, но как? Можете подсказать?
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #3 : 21.07.2014, 19:00:16 »

ну в XML файле прописываете
Код
	<scriptfile>install_script.php</scriptfile>
 

Ну а там примерно такое содержимое:
Код
...
class YourComponentNameInstallerScript
{
    ...
   //Метод, который исполняется после install/update/uninstall.
   public function postflight($type, $parent)
   {
      ...// здесь запрос в бд на публикацию модуля
   }
   ...
}
 
Записан
asmuz
Осваиваюсь на форуме
***

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

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


www.AsmuZ.ru


« Ответ #4 : 21.07.2014, 19:37:52 »

Сделал вот так, но после установки белый экран... Что делаю не так?
И не пойму как еще задать позицию для модуля?

Код:
<?php
defined('_JEXEC') or die('Restricted access');

class Mod_CobalticonsInstallerScript
{
public function postflight($type, $parent)
{
parent::postflight($type, $parent);
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->update('#__modules');
$query->set('published = 1');
$query->where("module = 'mod_cobalticons'");
$db->setQuery($query);
$db->execute();
}
}
Скопировал и переделал этот кусок кода с другого инсталлятора
Записан
asmuz
Осваиваюсь на форуме
***

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

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


www.AsmuZ.ru


« Ответ #5 : 21.07.2014, 19:41:52 »

Убрал parent::postflight($type, $parent); все заработало!
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #6 : 21.07.2014, 19:57:01 »

ага позиция там же прописывается по идее:
$query->set('position = yourposition');
Записан
asmuz
Осваиваюсь на форуме
***

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

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


www.AsmuZ.ru


« Ответ #7 : 21.07.2014, 20:20:32 »

И вот вроде бы все отлично, ан нет...

В принципе скрипт отрабатывает на ура, модуль публикуется в нужную позицию, но не появляется... Вот что отображается в менеджере модулей админки после установки:



Захожу в модуль, никаких настроек привязки к пунктам меню нету, т.к. это модуль админки. Но после сохранения значение меняется на "все" и модуль отображается

В базе данных ничего при этом не изменилось... Куда копать? Где может быть это значение?
« Последнее редактирование: 21.07.2014, 20:24:21 от asmuz » Записан
b2z
Support Team
*****

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

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


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


« Ответ #8 : 21.07.2014, 20:49:01 »

Как я понимаю, необходимо сделать вставку в таблицу _modules_menu, при этому menuid должно быть 0.
Записан
asmuz
Осваиваюсь на форуме
***

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

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


www.AsmuZ.ru


« Ответ #9 : 21.07.2014, 20:51:09 »

Как я понимаю, необходимо сделать вставку в таблицу _modules_menu, при этому menuid должно быть 0.
Да, это так... Но как это сделать, ведь модуль создается с порядковым ID, а как его узнать при установке?
Может подскажете как модифицировать этот код?

Код:
<?php
defined('_JEXEC') or die('Restricted access');

class Mod_CobalticonsInstallerScript
{
public function postflight($type, $parent)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->update('#__modules');
$query->set('published = 1');
                $query->set('position = "cpanel"');
$query->where("module = 'mod_cobalticons'");
$db->setQuery($query);
$db->execute();
}
}
« Последнее редактирование: 21.07.2014, 20:55:03 от asmuz » Записан
b2z
Support Team
*****

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

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


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


« Ответ #10 : 21.07.2014, 20:56:55 »

Сделайте SELECT и найдите id Wink

Код
$query->select('id')
   ->from('#__modules')
   ->where('module = ' . $db->quote('mod_cobalticons'));
 
$moduleId = $db->setQuery($query)
   ->loadResult();
« Последнее редактирование: 21.07.2014, 21:01:14 от b2z » Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #11 : 21.07.2014, 21:01:03 »

все правильно только туда надо инсерт похоже сделать  в _modules_menu всмысле. Кстатии полезная фишка, выложи потом код чтобы копипастить)
« Последнее редактирование: 21.07.2014, 21:11:11 от zomby6888 » Записан
asmuz
Осваиваюсь на форуме
***

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

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


www.AsmuZ.ru


« Ответ #12 : 21.07.2014, 21:22:24 »

Дмитрий, понимаю что выгляжу полным нубом (так оно и есть), но не могли бы Вы привести полностью готовый код... Я конечно очень-очень старался, но у меня ничего не получилось. В принципе я понимаю как это работает, но вот синтаксис... Я только начинаю путь PHP девелопера, так что у меня все впереди...
Записан
b2z
Support Team
*****

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

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


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


« Ответ #13 : 21.07.2014, 21:46:39 »

Добавьте к тому, что у Вас есть.

Код
$query->clear();
 
$query->select('id')
   ->from($db->quoteName('#__modules'))
   ->where('module = ' . $db->quote('mod_cobalticons'));
 
$moduleId = $db->setQuery($query)
   ->loadResult();
 
$query->clear();
 
$query->insert($db->quoteName('#__modules_menu'))
   ->columns('moduleid', 'menuid')
   ->values($moduleId, 0);
 
$db->setQuery($query)
   ->execute();
Записан
asmuz
Осваиваюсь на форуме
***

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

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


www.AsmuZ.ru


« Ответ #14 : 21.07.2014, 21:55:37 »

Дмитрий спасибо ОГРОМНОЕ!  Cheesy Cheesy Cheesy
Все заработало!
Записан
b2z
Support Team
*****

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

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


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


« Ответ #15 : 21.07.2014, 21:59:18 »

Еще 5 коппек  drink
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

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