Новости Joomla

joomLab Gallery - плагин галереи изображений для Joomla

👩‍💻 joomLab Gallery - плагин галереи изображений для Joomla.Плагин joomLab Gallery позволит Вам добавлять в любой материал неограниченное количество галерей, а главное удобно управлять файлами и эффектами в каждой галерее.Плагин использует популярны скрипты Swiper.js и FancyBox. Первый для крутой организации и эффектов галерей, а второй для красивого и функционального показа оригинальных изображений на Вашем сайте.На данный момент плагин имеет 10 макетов вывода - это 10 различных эффектов галерей и Вы можете совмещать все 10 в 1 материале.Плагин позволяет гибко настраивать индивидуально каждую галерею в материале. Вы можете выбрать макет, эффекты и даже можете управлять функциями всплывающего окна изображения.Недостатки.Такой вид реализации не предусматривает выбор изображения на сервере. Т.е. Вы не можете выбрать уже добавленное фото, только загружать заново. Плагин не предоставляет возможности доступа к медиа-менеджеру.Плагин бесплатный. Разработчик - участник нашего сообщества Александр Новиков (@pro-portal).Страница расширения@joomlafeed#joomla #расширения

Готовлю большой выпуск, включающий интервью с участниками Joomla Ну что, интересная инициатива от...

Готовлю большой выпуск, включающий интервью с участниками Joomla Ну что, интересная инициатива от...

Готовлю большой выпуск, включающий интервью с участниками Joomla 🖨Ну что, интересная инициатива от @webtolkru в виде интервью с разными участниками весьма меня увлекла. Я, вооружившись данным примером, решил подготовить выпуск для NorrNext (@norrnext) и экстраполировал идею на международный масштаб. Теперь готовлю эксклюзивный выпуск с участниками Joomla сообщества со всего мира, которые, в той или иной мере, внесли свой вклад в развитие и популяризацию системы. Будут беседы с людьми из разных стран и фото с юбилейной символикой 📸Работа в процессе 👆 📝О результатах оповещу отдельно.

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

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Могут а почему нет? Я вот например, когда у меня много AJAX запросов создаю отдельный контроллер под аяксы который мне отдает json данные.
интернет-блог: http://websiteprog.ru
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Могут а почему нет? Я вот например, когда у меня много AJAX запросов создаю отдельный контроллер под аяксы который мне отдает json данные.
А я отдельную модель под AJAX создаю))
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
А как ты к ней обращаешся все равно же наверное через контроллер? Мне удобно что у меня для каждого запроса свой экшн, своя может быть модель используется
интернет-блог: http://websiteprog.ru
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
А как ты к ней обращаешся все равно же наверное через контроллер?
Конечно через контроллер) Но запросы же должны быть в модели, а не в контроллере )
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
А я отдельную модель под AJAX создаю))
Зачем отдельную? Я в той же модели делаю метод под AJAX.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Зачем отдельную? Я в той же модели делаю метод под AJAX.
Что бы не путаться ) Да и бывает что в конструкторе модели базово инициализируются данные которые потом юзаются по всей модели, и бывают там же и запросы, так вот что бы лишние запросы не тянуть, да и что бы как то отделить все, и знать что раз AJAX то лезть туда )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
О скока сразу мнений. Вот только я с аяксом ни разу даже не сталкивался.
Модуль выводит список записей, для каждой записи кнопка вызова формы и передача форме параметров из записи. Форма post, в форме action="index.php" (модуль предполагается на главной), и поля
Код: html4strict
      <input type="hidden" name="option" value="com_mfo" />
      <input type="hidden" name="task" value="smail.work" />
т.е., если я понял правильно, будет стандартным механизмом вызван контроллер smail компонента com_mfo.
Т.к. модель smail не возвращает данные, а просто отсылает почтовое сообщение с данными из формы в модуле, может, вообще обойтись без модели и все сделать в контроллере? Как правильно? AJAX - это хорошо, но но пока слабо без конкретного примера.

Возможно, можно вообще обойтись без компонента и все обрабатывать в модуле, но я не знаю, как в модуле отловить сабмит формы и вызвать функцию в хелпере.
[spoiler title=Плагин]
Код: php
<?php defined('_JEXEC') or die;

require_once __DIR__ . '/helper.php';
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
$items = ModMfoCreditOffersHelper::getItems((bool)JFactory::getUser()->guest);
require JModuleHelper::getLayoutPath('mod_mfo_creditoffers', $params->get('layout', 'default'));
require_once JPATH_SITE.'/components/com_content/helpers/route.php';
JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel');
[/spoiler]

[spoiler title=Хелпер модуля]
Код: php
<?php defined('_JEXEC') or die;

require_once JPATH_SITE.'/components/com_content/helpers/route.php';

class ModMfoCreditOffersHelper
{
  public static function getItems($is_guest)
  {
    $status = (bool)$is_guest ? '3' : '2';
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('id, offername, status, sm_from, sm_to, prc_from, prc_to, term_from, term_to')
          ->from('#__mfo_credit_offers')
          ->where('status != '.$status);
    try
    {
      $items = $db->setQuery($query)->loadObjectList('id');
      $query = $db->getQuery(true)->select('co_id, `condition`')->from('#__mfo_credit_offers_conditions');
      $conditions = $db->setQuery($query)->loadObjectList();
      foreach ($conditions as $condition) {
        if (isset($items[$condition->co_id]))
          $items[$condition->co_id]->conditions[] = $condition;
      }
      return $items;
    }
    catch (RuntimeException $e)
    {
      $this->setError($e->getMessage());
      return false;
    }
  }
}
[/spoiler]

[spoiler title=Вьюха модуля]
Код: php
<?php defined('_JEXEC') or die;
if (!empty($items) && count($items)) {

  JHtml::_('jquery.framework');

  $document = JFactory::getDocument();
  $document->addStyleSheet('/media/com_mfo/css/jquery-ui.min.css');
  $document->addStyleSheet('/media/mod_mfo_co/css/mod_mfo_co.css');
 
  $document->addScript('/media/com_mfo/js/jquery-ui.min.js');
  $document->addScript('/media/mod_mfo_co/js/jquery.maskedinput.js');
  $document->addScript('/media/mod_mfo_co/js/accounting.min.js');
  $document->addScript('/media/mod_mfo_co/js/mod_mfo_co.js');

  $params = JComponentHelper::getParams('com_mfo');
  $dcs = $params->get('mfo_decimal_separator', '.');
  $ths = $params->get('mfo_thousands_separator', ' ');
  if ($ths == '=') $ths = '';
  $document->addScriptDeclaration('var dcs = "'.$dcs.'";');
  $document->addScriptDeclaration('var ths = "'.$ths.'";');

  echo '<div class="mfo-co">';
  foreach ($items as $i => $item) {
    $id = $item->id;
    echo '<div class="mfo-co-item">';
    if (isset($item->conditions) && count($item->conditions)) $list = $item->conditions;
    echo '<h4>'.$item->offername.'</h4>';
    if (isset($list) && count($list)) {
      echo '<div class="conditions">';
      $list_cnt = count($list);
      $list_ii = 1;
      foreach ($list as $listitem) {
        if ($list_ii == $list_cnt)
          {echo $listitem->condition;} else
          {echo $listitem->condition.'<br />';}
        $list_ii++;
      }
      echo '</div>';
    }
    echo '<div>'.JText::sprintf('MOD_MFO_CO_SM', number_format($item->sm_from,0,$dcs,$ths), number_format($item->sm_to,0,$dcs,$ths)).'</div>';
    echo '<div>'.JText::sprintf('MOD_MFO_CO_PRC', number_format($item->prc_from,1,$dcs,$ths), number_format($item->prc_to,1,$dcs,$ths)).'</div>';
    echo '<div>'.JText::sprintf('MOD_MFO_CO_TERM', number_format($item->term_from,0), number_format($item->term_to,0)).'</div>';
    echo '<input type="hidden" name="smf'.$id.'" value="'.(int)$item->sm_from.'">';
    echo '<input type="hidden" name="smf'.$id.'" value="'.(int)$item->sm_from.'">';
    echo '<input type="hidden" name="smt'.$id.'" value="'.(int)$item->sm_to.'">';
    echo '<input type="hidden" name="prct'.$id.'" value="'.(int)$item->prc_to.'">';
    echo '<input type="hidden" name="termf'.$id.'" value="'.(int)$item->term_from.'">';
    echo '<input type="hidden" name="termt'.$id.'" value="'.(int)$item->term_to.'">';
    echo '<div><a class="btn btn-primary" href="javascript:ShowForm('.$id.')">'.JText::_('MOD_MFO_CO_DEMAND').'</a></div>';
    echo '</div>';
  }
  echo '</div>';
 
}?>

<form action="<?php echo JRoute::_('index.php'); ?>" method="post" id="co-form" class="form-inline">
  <a href="javascript:HideForm(false)" class="overlay" id="co_form"></a>
  <div class="popup">
    <a class="close" href="javascript:HideForm(false)"></a>
    <div class="mfo_co_controls">
      <div class="pretext">
        <h2><?php echo JText::_('MOD_MFO_CO_FORM_CAPTION'); ?></h2>
        <label><?php echo JText::sprintf('MOD_MFO_CO_FORM_PRETEXT', $item->offername); ?></label>
      </div>
      <div class="controls">
        <?php if ((int)$item->sm_from == (int)$item->sm_to) {?>
          <label for="amount-sm"><span><?php echo JText::_('MOD_MFO_CO_FORM_SM'); ?></span></label>
          <input class="no-brd" type="text" id="amount-sm" readonly disabled="true" value="<?php echo (int)$item->sm_to; ?>">
        <?php } else { ?>
          <label for="amount-sm"><span><?php echo JText::_('MOD_MFO_CO_FORM_SM'); ?></span></label>
          <input class="no-brd" type="text" id="amount-sm" readonly disabled="true">
          <div id="slider-sm"></div>
        <? } ?>
      </div>
      <div class="controls">
        <?php if ((int)$item->term_from == (int)$item->term_to) {?>
          <label for="amount-term"><span><?php echo JText::_('MOD_MFO_CO_FORM_TERM'); ?></span></label>
          <input class="no-brd" type="text" id="amount-term" readonly disabled="true" value="<?php echo (int)$item->term_to; ?>">
        <?php } else { ?>
          <label for="amount-term"><span><?php echo JText::_('MOD_MFO_CO_FORM_TERM'); ?></span></label>
          <input class="no-brd" type="text" id="amount-term" readonly disabled="true">
          <div id="slider-term"></div>
        <? } ?>
      </div>
      <div class="controls">
        <label for="amount-mpay"><span><?php echo JText::_('MOD_MFO_CO_FORM_MPAY'); ?></span><span class="star"> *</span></label>
        <input class="no-brd" type="text" id="amount-mpay" readonly disabled="true">
      </div>
      <div class="controls">
        <p><span class="star">* </span><?php echo JText::_('MOD_MFO_CO_FORM_PS'); ?></p>
      </div>
    </div>
    <div class="mfo_co_controls">
      <?php if ((bool)JFactory::getUser()->guest) { ?>
        <div class="controls">
          <hr />
          <label for="mod_mfo_co_name"><span><?php echo JText::_('MOD_MFO_CO_FORM_NAME'); ?></span><?php echo JText::_('MOD_MFO_CO_FORM_NAME_PH'); ?></label>
          <input id="mod_mfo_co_name" type="text" class="inputbox"/>
        </div>
        <div class="controls">
          <label for="mod_mfo_co_phone"><span><?php echo JText::_('MOD_MFO_CO_FORM_PHONE'); ?></span><?php echo JText::_('MOD_MFO_CO_FORM_PHONE_PH'); ?></label>
          <input id="mod_mfo_co_phone" type="text" class="inputbox" placeholder="+7(___)___-__-__"/>
        </div>
      <?php } else { ?>
        <div class="controls">
          <hr />
          <label><span><?php echo JText::_('MOD_MFO_CO_FORM_POSPTEXT'); ?></span></label>
        </div>
      <?php } ?>
    </div>
    <div class="mfo_co_controls">
      <div class="controls">
        <hr />
        <a class="btn btn-primary" href="javascript:HideForm(true)"><?php echo JText::_('MOD_MFO_CO_DEMAND')?></a>
      </div>
      <input type="hidden" name="option" value="com_mfo" />
      <input type="hidden" name="task" value="smail.work" />
      <input type="hidden" name="return" value="<?php echo $return; ?>" />
    </div>
  </div>
</form>
[/spoiler]
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
ну как отловить сабмит в модуле? Как и везде!
меняете  <input type="hidden" name="task" value="smail.work" /> на <input type="hidden" name="task" value="my_task" />
и в модуле в любом месте:
$input  = JFactory::getApplication()->input;
if($input->getCmd('task') === 'my_task'){
... выполняем код
}

Но лучше в модуле это не делать, а именно в компонент! Ибо если будет включено на сайте кеширования то модуль загрузится из кеша, и у вас ничего не выполнится!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Но лучше в модуле это не делать, а именно в компонент!
В компоненте отправку письма делать лучше непосредственно в контроллере или через модель?
Сообщение об успешной отправке либо ошибке выводить через JFactory::getApplication()->enqueueMessage() - нормально?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
В компоненте отправку письма делать лучше непосредственно в контроллере или через модель?
Сообщение об успешной отправке либо ошибке выводить через JFactory::getApplication()->enqueueMessage() - нормально?
Можно и в контроллере можно и в модели!
Ну смотря как вы хотите если через AJAX то JFactory::getApplication()->enqueueMessage() не покатит..
а если у вас ещё и форма в в другом месте чем этот компонент, то ещё же и вернуться надо будет на страницу с которой была отправка!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
нет, не через AJAX однозначно, мне до него еще далеко :)
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
нет, не через AJAX однозначно, мне до него еще далеко :)
Да блин, я не понимаю, чем AJAX так страшен? Тупо вызов той-же самой функции контроллера, только через $.ajax(). Нет ничего проще =) А если пользуетесь тройкой, то вообще com_ajax Вам в помощь. Благо есть мануал.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Да блин, я не понимаю, чем AJAX так страшен? Тупо вызов той-же самой функции контроллера, только через $.ajax(). Нет ничего проще =) А если пользуетесь тройкой, то вообще com_ajax Вам в помощь. Благо есть мануал.
Дима знаешь чем страшен AJAX?
Вот подобным:
Спойлер
[свернуть]
;D
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Контроллер:
Код: php
class MfoControllerSMail extends JControllerLegacy
{
  public function work()
  {
    $uri = JFactory::getURI();
    JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
    $this->setRedirect(JRoute::_($uri));
    if ((bool)SendDemain())
      {JFactory::getApplication()->enqueueMessage('Заявка на зам успешно отправлена.');} else
      {JFactory::getApplication()->enqueueMessage('Ошибка отправики заявки на займ.', 'error');}
  }
 
  protected function SendDemain()
  {
    $input = JFactory::getApplication()-input;
    print_r($input->getWord('login'));
    return true;
  }
}
Сообщение, выводимое посредством enqueueMessage(), не появляется, print_r($input->getWord('login')); - тоже тишина.

Сабмит формы вызывается в js:
Код: javascript
  HideForm = function(is_submit)
  {
    $(".overlay").toggleClass("active");
    $(".popup").toggleClass("active");
    if (is_submit) {
      alert('submit');             // сообщение появляется!
      $("co-form").submit();   // тишина ...
    }
  }

Что я не так делаю?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Попробуйте дампнуть перед
Код: php
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

Может с токеном что-то.

И еще здесь ошибка $input = JFactory::getApplication()-input; должно быть ->input;

Кстати, Вы под тройку разрабатываете?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Да, J3.
Токен закомментировал, ошибку исправил, редирект в контроллере тоже закомментировал, эффекта никакого.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Да, J3.
Начиная с Joomla 3 при разработке компонента к объекту JInput можно обращаться не из Приложения, а как к свойству input объекта контроллера класса JControllerLegacy (если ваши контроллеры расширяют класс JControllerLegacy, а это обычная практика). То есть вместо JFactory::getApplication()->input в контроллере можно использовать просто $this->input.

http://joomlablog.ru/dokumentatsiya/dlya-razrabotchika/api/484-jinput-poluchenie-i-filtratsiya-peremennykh-zaprosa

Токен закомментировал, ошибку исправил, редирект в контроллере тоже закомментировал, эффекта никакого.
А форма вообще отправляется?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А форма вообще отправляется?
А как проверить?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
А как проверить?
Эмм, ну Вы же не AJAXом отправляете. Должна странится обновиться или хотя бы сделать такую попытку =)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Выходит, что не отправляется форма.
Код
      <input type="hidden" name="option" value="com_mfo" />
      <input type="hidden" name="task" value="smail.work" />
Что это может быть? Чего-то не хватает?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Не в этом дело. Получается, что не срабатывает $("co-form").submit();
Только непонятно, почему.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Нашел косяк: не $("co-form").submit();, а $("#co-form").submit();
Теперь ругается на if ((bool)SendDemain()) в контроллере:  Call to undefined function SendDemain()
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Туплю: if ((bool)$this->SendDemain())
*

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как в контроллере получить настройки почты J (те, что указываются в общих настройках на вкладке "Сервер")?
И как вообще отправить прочту в j3 правильно? с адреса сайта на адрес, указанный в параметрах компонента, способ отправки - smtp, отправка на яндекс
« Последнее редактирование: 03.07.2014, 16:02:55 от AlekVolsk »
*

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
  public function SendDemain()
  {
    
$body "Demain ".$this->input->getString('coname')."\r\n".
    
"Sum:  ".$this->input->getString('sm')."\r\n".
    
"Term:  ".$this->input->getString('term')."\r\n";
    if (
$this->input->getString('login') === 'site_guest')
    {
      
$body .= "Client:  ".$this->input->getString('login');
    } else {
      
$body .= "FIO:  ".$this->input->getString('fio')."\r\n".
      
"Phone:  ".$this->input->getString('phone');
    }

    
$mailer JFactory::getMailer();
    
$config JFactory::getConfig();
    
$mailer->setSender(array($config->get('config.mailfrom'), $config->get('config.fromname')));
    
$mailer->addRecipient('alekvolsk@yandex.ru');
    
$mailer->setSubject('Demain');
    
$mailer->setBody($body);
    
$send $mailer->Send();
    
    return (bool)
$send;
  }

Во фронт: Ошибка подключения к SMTP
При этом return == true
« Последнее редактирование: 03.07.2014, 16:40:59 от AlekVolsk »
*

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
$config->getValue замените на $config->get
уже, я изменил тот пост

upd:
Оказывается, денвер не отправляет через smtp, отправилось через sendmail: в папке денвер/tmp/ появился eml-файл, значит можно считать, что письмо отправлено?

После отправки сообщение, выданное во фронт через enqueueMessage() не закрывается при нажатии на крестик (как админке)
« Последнее редактирование: 03.07.2014, 16:53:16 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Выяснил, что не отправляются в $_POST значения некоторых полей формы (выделены):
Спойлер
[свернуть]
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться