Новости Joomla

👩‍💻 Вместе мы развиваем Joomla: станьте Joomfluencer!

👩‍💻 Вместе мы развиваем Joomla: станьте Joomfluencer!

Вы уверенно чувствуете себя перед камерой, динамичны, обаятельны и всегда улыбаетесь? Чувствуете себя искателем приключений, готовым поделиться своими исследованиями CMS Joomla!, взять интервью у видных деятелей сообщества, пообщаться лично или по видеосвязи с волонтерами Joomla или отправиться на поиски новых идей?

Joomla ищет одного или нескольких волонтеров, готовых вдохнуть новую жизнь в обсуждение Joomla, ее CMS, пользователей, сообщества и многого другого.

Возможны самые разные форматы и темы: шортсы, интервью, аналитика и разборы в режиме реального времени, быстрые советы и рекомендации, знакомство с миром Joomla, изучение открытого исходного кода... Нет никаких ограничений!

Joomla! уже активно представлена ​​во многих социальных сетях:
- 155K подписчиков на Facebook,
- 55K подписчиков на X (ранее Twitter),
- 16K подписчиков на YouTube,
- 14K подписчиков на LinkedIn,
- 5,7K подписчиков в Instagram
а так же другие площадки ждут вас. Аккаунты Threads и Bluesky относительно новые, но их популярность только растёт!

А если хватит энергии, можно рассмотреть и TikTok!

❓ Итак, вы готовы?
👉 Свяжитесь с отделом маркетинга по адресу: marketing@community.joomla.org

Подробности в статье в Joomla Community Magazine.

@joomlafeed

SW JProjects v.2.6.1 - компонент каталога расширений для веб-приложений

👩‍💻 SW JProjects v.2.6.1 - компонент каталога расширений для веб-приложений.

Компонент позволяет сделать свой мини-Joomla Extensions Directory - каталог расширений для CMS (не только для Joomla) или файлов. Есть возможность скачивания по лицензионным ключам создания кастомных схем данных для сервера обновлений.

v.2.6.1. Что нового?

  • Правки наследования схем серверов обновлений. Улучшена логика наследования схем серверов обновлений для проектов компонент - категория - проект.
  • Не стабильные релизы в сервере обновлений. Теперь в данные сервера обновлений попадают все версии (alpha, beta и т.д.), а не только stable.
  • Косметические изменения. В шаблоне по умолчанию сделаны замены некоторых CSS-классов, уточнено присвоение атрибутов loading=lazy и fetchpriority.
  • Рефакторинг и правки кода. Текущее обновление кодовой базы.
  • Исправление ошибок.

Больше спасибо за помощь в тестировании участникам нашего сообщества Александру Новикову (@pro_portal) и Александру Судьбинову (@alexrevo).

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Модуль обратной связи AJAX
« : 26.08.2014, 21:03:48 »
Нашел образец в сети, пытаюсь сделать свою, и в тупике.
Главный:
Спойлер
[свернуть]

Вьюха:
Спойлер
[свернуть]

Хелпер:
Спойлер
[свернуть]

Есс-но, письма не отправляются. Что делаю не так?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #1 : 26.08.2014, 22:03:37 »
первое что делаете не так так это не говорите нам или метод getAjax вообще срабатыват )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #2 : 26.08.2014, 22:07:35 »
метод getAjax вообще срабатыват )
Не знаю, может и не срабатывает, как узнать?
Это вообще первый опыт аякса
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #3 : 26.08.2014, 22:10:37 »
, может и не срабатывает, как узнать?
Это вообще первый опыт аякса
Ну посмотреть в консоли или нет ошибки..
на крайний случай вставить код в метод getAjax
Код: php
$file = fopen( 'd:/1.txt', 'w' );
fwrite( $file, print_r( $_REQUEST, true ) );
flush();
fclose( $file );
если на диске d появится файл 1.txt с данными того что пришло из $_REQUEST то все ок.
не показали ещё JS функцию которой отправляете AJAX
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #4 : 26.08.2014, 22:15:22 »
js вообще отсутствует, просто кнопка сабмита на форме, и все, в образце ничего более небыло.  :o

Образец - http://www.joomshaper.com/joomla-extensions/quick-contact

На диске d: ничего не появилось, getAjax() не выполняется
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #5 : 26.08.2014, 22:16:47 »
p.s. зачем вы всю форму завернули в echo ?
можно же просто
Код: php
?> 
<form action="<?php echo JRoute::_('index.php'); ?>" method="post" id="contact-us" class="form-vertival" enctype="multipart/form-data">
..
</form>
<?php

2. что это:
$inputs = $input->get('data', array(), 'ARRAY');
foreach ($inputs as $input) {
      if ($input['name'] == 'username') $username = $input['username'];
      if ($input['name'] == 'category') $cat = $input['category'];
      if ($input['name'] == 'msg') $msg = $input['msg'];
      if ($input['name'] == 'email') $useremail = $input['email'];
      if ($input['name'] == 'skype') $userskype = $input['skype'];
      if ($input['name'] == 'phone') $userphone = $input['phone'];
    }
Вы знаете что мало того что у вас все переменные будут пустые так вы ещё зачем то все это в цикл загнали!
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #6 : 26.08.2014, 22:18:35 »
js вообще отсутствует, просто кнопка сабмита на форме, и все, в образце ничего более небыло.  :o

Образец - http://www.joomshaper.com/joomla-extensions/quick-contact

На диске d: ничего не появилось, getAjax() не выполняется
Зачет ) А вы знаете что AJAX расшифровуется как Асинхронный JavaScript и XML ?) Вы хотите AJAX без J?)  ;D
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #7 : 26.08.2014, 22:30:39 »
Вообщем коротко!
Форма у вас должна быть такая с таким JS скриптом, и со такими скрытыми полями:
Код: php
<form action="index.php" method="post" id="formContact">
<input type="text" name="name" value="">
<input type="hidden" name="option" value="com_ajax" />
<input type="hidden" name="module" value="using" />
<input type="hidden" name="format" value="raw" />
<input type="button" value="Отправить" class="send-module-btn" />
<?php echo JHtml::_( 'form.token' ); ?>
</form>
<script type="text/javascript">
jQuery(document).ready(function ($) {
$('.send-module-btn').on('click', function () {
$.ajax({
type: 'POST',
cache: false,
dataType: 'html',
url: $('#formContact').attr('action'),
data: $('#formContact').serializeArray(),
success: function (data) {
alert(data);
}
});
})
})
</script>


Там где <input type="hidden" name="module" value="using" /> вместо using укажите название вашего модуля без приставки mod_

И В методе getAjax уже обрабатывайте данные:
Код: php
public function getAjax(){
if ( !JSession::checkToken() ) exit;
$input = JFactory::getApplication()->input;
echo '<p>' . $input->getString( 'name', '' ). '</p>';
}

вот тут я писал про AJAX в модуле Joomla 3.2
p.s. работает данный метод только для Joomla 3.2+
« Последнее редактирование: 26.08.2014, 22:34:06 от Istaan »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #8 : 26.08.2014, 22:45:59 »
Добился того, что getAjax() выполняется, файл на d: создается )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #9 : 26.08.2014, 22:57:10 »
Код: php
  public static function getAjax()
  {
    if (!JSession::checkToken()) exit;
/*
$file = fopen( 'd:/1.txt', 'w' );
fwrite( $file, print_r( $_REQUEST, true ) );
flush();
fclose( $file );
*/
    $input = JFactory::getApplication()->input;
    $module = JModuleHelper::getModule('contact_us');
    $params = new JRegistry();
    $params->loadString($module->params);
    $mail = JFactory::getMailer();

    $categories = explode('\r\n', $params->get('cu_categories'));

    $username = $input->getString('username');
    $cat = $input->getString('category');
    $msg = $input->getString('msg');
    $useremail = $input->getString('email');
    $userskype = $input->getString('skype');
    $userphone = $input->getString('phone');

    $workemail = '';
   
    if ($categories) {
      foreach($categories as $category){
        $i = strpos($category,'[');
        $categoryname = substr($category,0,(int)$i);
        $email = substr($category,(int)$i + 1,-1);
        if ($cat == $categoryname) {
          $workemail = $email;
          break;
        }
      }
    }

    $msg = $msg.'\r\n'.
      $username.'\r\n'.
      'E-mail: '.$useremail.'\r\n'.
      'Skype: '.$userskype.'\r\n'.
      'Тел.: '.$userphone;
     
    $mail->setSender(array('', 'MOD_CU_MAIL_SENDNAME'));
    $mail->addRecipient($workemail);
    $mail->setSubject(JText::_('MOD_CU_MAIL_SBJECT'));
    $mail->isHTML(true);
    $mail->Encoding = 'base64';
    $mail->setBody($msg);

    if ($mail->Send())
      {JFactory::getApplication()->enqueueMessage(JText::sprintf('MOD_CU_MAIL_SEND_TRUE', $username ));} else
      {JFactory::getApplication()->enqueueMessage(JText::sprintf('MOD_CU_MAIL_SEND_ERR', $send->__toString()), 'error');}
  }
После выполнения - белый экран
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #10 : 26.08.2014, 23:00:17 »
что это $send->__toString()?)
У вас нет этой переменной  и вы вызываете метод __toString() у несуществующего объекта.. получаете белый экран
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #11 : 26.08.2014, 23:09:22 »
Поправил,
Код: php
    $send = $mail->Send();

    if ($send == true)
не помогло

Убрал checkToken - тоже не помогло
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #12 : 26.08.2014, 23:16:35 »
Включите отображение ошибок, иначе будем тут гадать на кофейной гуще
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #13 : 26.08.2014, 23:18:18 »
Включено! Ошибок нет! В консоли чисто!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #14 : 26.08.2014, 23:34:00 »
Закомментировал все тело getAjax() - тоже белый экран.

Форма находится внутри меню (последний пункт, только на хосте кнопка не работает - сейчас делаю на локалке), может, это влияет?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #15 : 26.08.2014, 23:41:17 »
Закомментировал все тело getAjax() - тоже белый экран.

Форма находится внутри меню (последний пункт, только на хосте кнопка не работает - сейчас делаю на локалке), может, это влияет?
Включите отображение ошибок!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #16 : 26.08.2014, 23:46:22 »
Включено! Ошибок нет! В консоли чисто!
Уровень отображения - для разработчика
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #17 : 26.08.2014, 23:50:10 »
Почитал у Вас в блоге о некорректной обработке аяксом модулей с нижним подчеркиванием в имени, из-за этого, возможно?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #18 : 27.08.2014, 00:11:31 »
Поменял у кнопки-инпута type с submit на button, белый экран пропал. getAjax() выполняется, но письмо не отсылается, ошибок нет, в консоли чисто.
Код: javascript
				data: jQuery('#contact-us').serializeArray(),
success: function (data) {
alert(data);
}
data - пустая строка, что там должно быть?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #19 : 27.08.2014, 00:39:26 »
Подчистил код getAjax() и письма стали отправляться. Вот только в тело письма не могу вставить перенос строки:
Код: php
    $msg = $msg.'<br />'.
      $username.'<br />'.
      'E-mail: '.$useremail.'<br />'.
      'Skype: '.$userskype.'<br />'.
      'Тел.: '.$userphone;
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #21 : 27.08.2014, 17:07:36 »
Код: php
    $msg = $msg.'\r\n'.
      $username.'\r\n'.
      'E-mail: '.$useremail.'\r\n'.
      'Skype: '.$userskype.'\r\n'.
      'Тел.: '.$userphone;
Не работает перенос, весь текст в одну строку. Если оставить только \n, то тоже не работает.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Модуль обратной связи AJAX
« Ответ #22 : 27.08.2014, 17:29:37 »
Странно. У нас в одном из плагинов работает вот такое:

Код: php
// Prepare email body.
$body = "
" . JText::_('PLG_SYSTEM_JMB_COPYLETTERS_EMAIL_BODY_FROM'). ": " . $name . " <" . $email . ">\n
" . JText::_('PLG_SYSTEM_JMB_COPYLETTERS_EMAIL_BODY_TO'). ": " . $contact->name . " <" . $contact->email_to_old . ">\n
" . JText::_('PLG_SYSTEM_JMB_COPYLETTERS_EMAIL_BODY_SUBJECT'). ": " . $data['contact_subject'] . "\n
" . JText::_('PLG_SYSTEM_JMB_COPYLETTERS_EMAIL_BODY_MESSAGE'). ":\r\n\r\n" . stripslashes($body);
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #23 : 27.08.2014, 17:33:50 »
Так у Вас кавычки закрываются на следующей строке! Можно и так, конечно, работает, но почему не работает, если кавычки закрывать на той же строке?
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Модуль обратной связи AJAX
« Ответ #24 : 27.08.2014, 17:38:06 »
Ааа, так у Вас одинарные кавычки:
Цитировать
Простейший способ определить строку - это заключить ее в одинарные кавычки (символ ').

Чтобы использовать одинарную кавычку внутри строки, проэкранируйте ее обратной косой чертой (\). Если необходимо написать саму обратную косую черту, продублируйте ее (\\). Все остальные случаи применения обратной косой черты будут интерпретированы как обычные символы: это означает, что если вы попытаетесь использовать другие управляющие последовательности, такие как \r или \n, они будут выведены как есть вместо какого-либо особого поведения.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #25 : 27.08.2014, 17:40:28 »
Да, с двойными работает как надо, недосмотрел, спс.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #26 : 27.08.2014, 23:14:13 »
Код: javascript
	jQuery(document).ready(function($) {
jQuery('#cu-submit').on('click', function () {
jQuery.ajax({
type: 'POST',
cache: false,
dataType: 'text/html',
url: jQuery('#contact-us').attr('action'),
data: jQuery('#contact-us').serializeArray(),
success: function (data) {
alert(data);
}
});
});
});
Вопрос: success в какой момент выполняется: сразу после вызова getAjax() или ждет завершения getAjax() и потом выполняется? Как проверить?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #27 : 27.08.2014, 23:18:46 »
success выполняется после того как получен ответ от сервера! То есть после того как выполнен метод getAjax()
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Модуль обратной связи AJAX
« Ответ #28 : 27.08.2014, 23:19:39 »
т.е. на момент выполнения success письмо уже отправлено? спс
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Модуль обратной связи AJAX
« Ответ #29 : 27.08.2014, 23:25:51 »
т.е. на момент выполнения success письмо уже отправлено?
Да!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как создать модуль с использованием php?

Автор nartan

Ответов: 23
Просмотров: 4381
Последний ответ 11.08.2017, 10:54:08
от Никoлaй
СЕСИЯ при AJAX запросе к php файлу

Автор avantyrist

Ответов: 15
Просмотров: 3133
Последний ответ 20.12.2015, 14:13:43
от robert
[Решено] Русский язык в AJAX.php

Автор Hishchnik

Ответов: 15
Просмотров: 2342
Последний ответ 10.06.2014, 19:03:34
от Hishchnik
Погода по IP посетителя сайта. Модуль для Joomla 1.5, 2.5, 3.*, 4, 5 и так далее

Автор rishard

Ответов: 11
Просмотров: 4829
Последний ответ 02.05.2014, 20:07:58
от era
AJAX + Joomla

Автор scripter

Ответов: 3
Просмотров: 1404
Последний ответ 28.04.2014, 16:52:57
от Shustry