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

  • 13 Ответов
  • 453 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Sergeyy

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

*

robert

  • Профи
  • ********
  • 4004
  • 371
Нет, не обязательно, можно обойтись модулем.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

zomby6888

  • Живу я здесь
  • ******
  • 1484
  • 167
Капча то зачем?
интернет-блог: http://websiteprog.ru

*

Sergeyy

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

В tmpl/default.php
Код: 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...
}

joomla 2.5

*

Sergeyy

  • Осваиваюсь на форуме
  • ***
  • 147
  • 3
Капча то зачем?
А как же спамеры?
joomla 2.5

*

robert

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

P.S. Фу, task - тоже параметр, вот и напишите функцию на определенное его значение.
[offtop] У меня дежавю - точно помню, что я уже писал такие слова. [/offtop]
« Последнее редактирование: 13.11.2015, 01:04:17 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
в шаблоне вида модуля
Код: html4strict
<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>

в хелпере модуля
Код: php
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

  • Практически профи
  • *******
  • 2785
  • 376
А как же спамеры?
А спамеров уже очень давно не беспокоит CAPTCHA..
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

AlekVolsk

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

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

*

Sergeyy

  • Осваиваюсь на форуме
  • ***
  • 147
  • 3
   <input type="hidden" name="option" value="com_ajax" />
Это  в Joomla 3 com_ajax
у меня пока 2.5
joomla 2.5

*

robert

  • Профи
  • ********
  • 4004
  • 371
Делайте, как я писал:
Код: php-brief
$task=JFactory::getApplication()->input->get('task');
if($task=='за#&ись'){
МойМодульХелпер::МояСуперФункция();
}
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

AlekVolsk

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

*

voland

  • Профи
  • ********
  • 9366
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
а вы похожи на динозавра (это юмор)
Не, это не юмор

*

Sergeyy

  • Осваиваюсь на форуме
  • ***
  • 147
  • 3
Спасибо за помощь!
Юмористам особое...

Что получилось:
Helper.php
Код: 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
Код: 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>
joomla 2.5