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

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

Запись в БД из формы в плагине (модуле). Как!

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

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

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


« : 12.11.2015, 23:01:03 »

Здравствуйте!
Перерыл кучу страниц в сети, но так и не нашел ни одного примера как такое реализовать.
Задача:
Простое текстовое поле и CAPTCHA -> Пользователь ввел данные -> Запись в БД -> Сообщение Ок!
Неужели для такой задачи нужен компонент?
Записан
robert
Профи
********

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

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


« Ответ #1 : 12.11.2015, 23:09:49 »

Нет, не обязательно, можно обойтись модулем.
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #2 : 12.11.2015, 23:26:50 »

Капча то зачем?
Записан
Sergeyy
Осваиваюсь на форуме
***

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

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


« Ответ #3 : 12.11.2015, 23:35:02 »

Нет, не обязательно, можно обойтись модулем.
Что должно быть в <input type="hidden" name="task" value=?
и в function ?()

В tmpl/default.php
Код
<form action="<?php echo JRoute::_('index.php');?>" method="post" id="mail-form" >
<fieldset>
<label for="mail"><?php echo JText::_('MOD_MAIL')?></label>
<input id="mail" type="text" name="usermail" class="inputbox"  size="14" />
<input type="submit" name="Submit" class="button" value="<?php echo JText::_('Go')?>" />
<input type="hidden" name="task" value="?" />
<?php echo JHtml::_('form.token'); ?>
</fieldset>
</form>
 
А в helper.php
function ?(){
тут insert...
}

Записан
Sergeyy
Осваиваюсь на форуме
***

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

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


« Ответ #4 : 12.11.2015, 23:44:01 »

Капча то зачем?
А как же спамеры?
Записан
robert
Профи
********

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

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


« Ответ #5 : 12.11.2015, 23:56:04 »

Никакого task не будет, потому что компонента и, следовательно, контроллера нет. Напишите функцию в helper, которая срабатывает на наличие определенного параметра.

P.S. Фу, task - тоже параметр, вот и напишите функцию на определенное его значение.
[offtop] У меня дежавю - точно помню, что я уже писал такие слова. [/offtop]
« Последнее редактирование: 13.11.2015, 00:04:17 от robert » Записан
AlekVolsk
Профи
********

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

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



« Ответ #6 : 13.11.2015, 00:04:53 »

в шаблоне вида модуля
Код
<form action="/" method="post" id="mail-form" enctype="multipart/form-data">
// тут ваши поля
<input type="hidden" name="option" value="com_ajax" />
<input type="hidden" name="module" value="modulename" /> // системное имя модуля без префикса mod_
</form>

в хелпере модуля
Код
class ModModulenameHelper // соблюсти имя
{
 public static function getAjax() // точное имя функции
 {
   // если нужно подключить языковые файлы модуля, то это обязательно
   $language = JFactory::getLanguage();
   $language->load('mod_modulename', JPATH_BASE, null, true);
 
   // получаете то, что возвращает форма
   $input = JFactory::getApplication()->input;
 
   // получаете параметры модуля
   $module = JModuleHelper::getModule('modulename');
   $params = new JRegistry();
   $params->loadString($module->params);
 
   // далее получаете данные из формы (они все в $input) и делаете необходимый запрос в базу, стандартным свособом
 }
}

капnча тоже будет в $input, но скорее всего, поскольку является плагином, она сработает еще до отправки данных в модуль
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #7 : 13.11.2015, 00:08:04 »

А как же спамеры?
А спамеров уже очень давно не беспокоит CAPTCHA..
Записан
AlekVolsk
Профи
********

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

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



« Ответ #8 : 13.11.2015, 00:08:57 »

Вместо CAPTCHA есть не менее надежный способ:
в конец формы (перед </form>) добавляете
Код
<?php echo JHtml::_('form.token'); ?>

в хелпере самой первой строчкой в функции вставьте:
Код
if (!JSession::checkToken()) exit;
Записан
Sergeyy
Осваиваюсь на форуме
***

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

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


« Ответ #9 : 13.11.2015, 00:14:42 »

   <input type="hidden" name="option" value="com_ajax" />
Это  в Joomla 3 com_ajax
у меня пока 2.5
Записан
robert
Профи
********

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

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


« Ответ #10 : 13.11.2015, 00:19:17 »

Делайте, как я писал:
Код
$task=JFactory::getApplication()->input->get('task');
if($task=='за#&ись'){
МойМодульХелпер::МояСуперФункция();
}
 
Записан
AlekVolsk
Профи
********

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

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



« Ответ #11 : 13.11.2015, 00:20:44 »

у меня пока 2.5
тогда сори, я с 2.5 не работал, а вы похожи на динозавра (это юмор)
Записан
voland
Профи
********

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

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


любит наш народ всякое гавно...


« Ответ #12 : 13.11.2015, 00:52:56 »

а вы похожи на динозавра (это юмор)
Не, это не юмор
Записан
Sergeyy
Осваиваюсь на форуме
***

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

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


« Ответ #13 : 13.11.2015, 12:01:18 »

Спасибо за помощь!
Юмористам особое...

Что получилось:
Helper.php
Код
class ModMailHelper
{
function getPost()
{
$task=JFactory::getApplication()->input->get('task');
if($task=='mail'){
$input = JFactory::getApplication()->input->get('usermail');
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->insert($db->quoteName('#__table'));
$columns = array( $db->quoteName('email'));
$query->columns($columns);
$query->values($db->Quote($input));
$db->setQuery($query);
$db->query();
if ($query) { // Сообщение
JFactory::getApplication()->enqueueMessage(JText::_('SAVE'));}
}
}
}
 

default.php
Код
<form action="" method="post" >
<fieldset>
<label for="usermail"><?php echo JText::_('Введите Email')?></label>
<input id="usermail" type="text" name="usermail" class="inputbox"  size="14" />
<input type="submit" name="Submit" class="button" value="<?php echo JText::_('Отправить')?>" />
<input type="hidden" name="task" value="mail" />
</fieldset>
</form>
 
Записан
Страниц: [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