Новости Joomla

WT Yandex map items v.2.1.0 модуль для Joomla.Выводит материалы Joomla в виде меток на Яндекс.Карты

WT Yandex map items v.2.1.0 модуль для Joomla.Выводит материалы Joomla в виде меток на Яндекс.Карты

👩‍💻 WT Yandex map items v.2.1.0 модуль для Joomla.Выводит материалы Joomla в виде меток на Яндекс.Карты.v.2.1.0. Что нового?Сохранение последнего вида карты. Добавлены новые опции, позволяющие как для одного экземпляра модуля, так и для всех сохранять на устройстве пользователя последний использованный центр (координаты) и масштаб (zoom) карты. Это позволит открыть карту в том же месте после обновления страницы или при повторном открытии браузера.Определение местоположения пользователя.Модуль может определять местоположение пользователя и центрировать карту на нём. При одновременном использовании с функцией сохранения последнего вида карты определение геопозиции будет срабатывать только в первый раз. В дальнейшем, если обнаружены сохранённые данные центра и масштаба - будут использоваться они.CSS классы для маркеров карты.Всем маркерам карты добавлен CSS-класс wt-yandex-map-items-marker. Для просмотренных маркеров (по которым кликали) добавляется CSS-класс wt-yandex-map-items-marker-viewed, что позволит выделять просмотренные маркеры с помощью стилей в CSS-файлах вашего шаблона. Также для контейнеров маркеров ymaps на карте добавлены data-атрибуты: data-module-id - id модуля и data-marker-id - id маркера.Обработка GET-параметров в URL.Карта может реагировать на GET-параметры в url:- map[zoom] - устанавливает параметр масштаба.- map[center_latitude] и map[center_longitude] - широта и долгота центра карты.- map[marker_id] - id маркера, на котором центрируется карта.Таким образом вы можете создавать ссылку на карту с указанием конкретного маркера, на котором карта сфокусируется после загрузки маркеров. Например, https://site .ru/map?map[marker_id]=18465. Или же ссылку с указанием конкретных координат: https://site .ru/map?map[zoom]=16&map[center_latitude]=51.529706&map[center_longitude]=46.033922Страница расширенияGitHub расширенияВидео-обзор на YoutubeВидео-обзор на VK ВидеоВидео-обзор на Rutube@joomlafeed#joomla #yandex

Вышел Quantum Manager ver.3.2.1 и ver.2.0.5 — Релиз безопасности

Вышел Quantum Manager ver.3.2.1 и  ver.2.0.5 — Релиз безопасности

Вышел Quantum Manager ver.3.2.1 и ver.2.0.5 — Релиз безопасности.В последних версиях Quantum Manager устранены две уязвимости безопасности и исправлено несколько ошибок. Всем пользователям настоятельно рекомендуется обновиться до версии 3.2.1, чтобы обеспечить безопасность и актуальность установки.👩‍💻 Исправлены:1. XSS в SVG-файле. Запрещено выполнение встроенных в SVG скриптов.2. XSS по имени вредоносного файла. Больше никакого выполнения кода через имя файла.Поскольку эти проблемы влияют на безопасность сайта, мы подготовили две версии: одну для Joomla 5 и Joomla 4, а также дополнительную версию для Joomla 3 (предназначенную для устаревшего релиза Quantum Manager 2.0.4, для тех, кто все еще поддерживает сайты на Joomla 3).⚠️ Примечание: обновите Quantum Manager до версии 3.2.1 для Joomla 5 / Joomla 4 и установите Quantum Manager версии 2.0.5 для Joomla 3 (только исправления проблем безопасности).Команда NorrNext благодарит Joomla Security Strike Team и Joomla VEL Team за помощь в обнаружении и исправлении уязвимостей.Читать новостьСкачать@joomlafeed#joomla #расширения

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

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
что делать с фильтрами без понятия, ибо не  экстрасенс и не вижу ваш код что бы понять где вы накосячили
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Удобно ли будет, если чуть позже скину в личку компонент? боюсь, много листингов здесь тяжело будет выкидывать.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Удобно ли будет, если чуть позже скину в личку компонент? боюсь, много листингов здесь тяжело будет выкидывать.
Нет только шаблон с выводом формы и фильтров сюда выложите
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
[spoiler title=Вьюха documc]
Код: php
<?php
defined('_JEXEC') or die;
JHtml::_('bootstrap.tooltip');
JHtml::_('jquery.framework');
$document = JFactory::getDocument();
$document->addStyleSheet('/media/com_mfo/css/jquery-ui-1.10.4.custom.css');
$document->addStyleSheet('/media/com_mfo/css/com_mfo_front.css');
$document->addScript('/media/com_mfo/js/jquery-ui-1.10.4.custom.js');

$loan = JFactory::getApplication()->input->getString('loan', '');
$list = JFactory::getApplication()->input->getString('list', '0');
$llist = '';
if ($list == '1') $llist = 'c';
if ($list == '2') $llist = 'd';
$dtfrom = JFactory::getApplication()->input->getString('dtfrom', '');
$dtto = JFactory::getApplication()->input->getString('dtto', '');

$ulogin = JFactory::getUser()->username;

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

$is_contributions = $params->get('mfo_is_contributions_columns', 0);

$db =JFactory::getDBO();
$query = 'select min(odate), max(odate) from #__mfo_docums where (client = '.$db->quote($ulogin).') and (loan = '.$db->quote($loan).')';
$item_minmax = $db->setQuery($query)->loadRow();
$dtmin = JHtml::_('date', $item_minmax[0], 'd.m.Y');
$dtmax = JHtml::_('date', $item_minmax[1], 'd.m.Y');

$documc_js = '
jQuery(function($) {
  $.datepicker.regional["ru"] = {
    closeText: "Закрыть",
    prevText: "<<",
    nextText: ">>",
    currentText: "Сегодня",
    monthNames: ["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],
    monthNamesShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
    dayNames: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
    dayNamesShort: ["ВС","ПН","ВТ","СР","ЧТ","ПТ","СБ"],
    dayNamesMin: ["ВС","ПН","ВТ","СР","ЧТ","ПТ","СБ"],
    weekHeader: "Н",
    dateFormat: "mm.dd.yy",
    firstDay: 1,
    isRTL: false,
    showMonthAfterYear: false,
    yearSuffix: ""
  };
  $.datepicker.setDefaults($.datepicker.regional["ru"]);

  UpdateFilter = function() {
    $("#loading").css("display", "block");
    $("#adminForm").submit();
  };
 
  ClearFilter = function() {
    $("#loading").css("display", "block");
    $("#dtfrom").val("'.$dtmin.'");
    $("#dtto").val("'.$dtmax.'");
    $("#adminForm").submit();
  };
});

jQuery(document).ready(function($)
{
  var outerDiv = $(\'body\');
  $(\'<div id="loading"><div class="popup"><div class="loader"><div class="loader-label">'.JText::_('COM_MFO_FTP_UPDATE_POPUP', true).'</div></div></div></div>\').appendTo(outerDiv);
});';
$document->addScriptDeclaration($documc_js);
?>
<div id="mfo" class="clearfix" >
  <h1><?php echo JText::sprintf('COM_MFO_H_DOCUMC', $loan); ?></h1>
  <hr />
  <form action="<?php echo JRoute::_('index.php'); ?>" method="get" name="adminForm" id="adminForm" class="form-horizontal">
    <div>
      <input type="hidden" name="option" value="com_mfo" />
      <input type="hidden" name="view" value="documc" />
      <input type="hidden" name="loan" value="<?php echo $loan; ?>" />
      <input type="hidden" name="list" value="<?php echo $list; ?>" />
    </div>
   
    <div class="control-group">
      <div class="controls">
        <?php
          $query = 'select lupdate from #__mfo_users where client = '.$db->quote($ulogin);
          $item_lu = $db->setQuery($query)->loadResult();
          echo '<span class="mfo-lupdate">'.JText::sprintf('COM_MFO_FTP_LASTUPDATE', JHtml::_('date', $item_lu, 'd.m.Y H:i')).'</span>';
        ?>
      </div>
    </div>
    <div class="control-group">
      <div class="controls">
        <a class="btn btn-info mfo-breturn" href="index.php?view=loans<?php echo $llist; ?>"><?php echo JText::_('COM_MFO_RETURN');?></a>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <h4><?php echo JText::_('COM_MFO_H_DOCUMS_L'); ?></h4>
        <?php
          $query = 'select bdate, edate, term, prc, sm, rest, arest, prest, crest, srest from #__mfo_loans where (client = '.$db->quote($ulogin).') and (num = '.$db->quote($loan).')';
          $item_loan = $db->setQuery($query)->loadObject();
          $rests = $item_loan->arest+$item_loan->prest+$item_loan->srest;
          if ($is_contributions) $rests += $item_loan->crest;
          echo '<div class="loan-info">';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_BDATE').' <span>'.JHtml::_('date', $item_loan->bdate, 'd.m.Y').'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_EDATE').' <span>'.JHtml::_('date', $item_loan->edate, 'd.m.Y').'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_TERM').' <span>'.$item_loan->term.'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_PRC').' <span>'.number_format($item_loan->prc,4,'.','').'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_SM').' <span>'.number_format($item_loan->sm,2,$dcs,$ths).'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_REST').' <span>'.number_format($item_loan->rest,2,$dcs,$ths).'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_RESTS').' <span>'.number_format($rests,2,$dcs,$ths).'</span></div>';
          echo '</div>';
        ?>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <h4><?php echo JText::_('COM_MFO_H_DOCUMS'); ?></h4>
        <script>jQuery(function(){
          var form = document.getElementById('adminForm');
          jQuery("#dtfrom").datepicker({dateFormat:"dd.mm.yy",changeMonth:true,changeYear:true,showButtonPanel:true,minDate:"<?php echo JHtml::_('date', $dtmin, 'd.m.Y'); ?>",maxDate:"<?php echo JHtml::_('date', $dtmax, 'd.m.Y'); ?>"});
          jQuery("#dtto").datepicker({dateFormat:"dd.mm.yy",changeMonth:true,changeYear:true,showButtonPanel:true,minDate:"<?php echo JHtml::_('date', $dtmin, 'd.m.Y'); ?>",maxDate:"<?php echo JHtml::_('date', $dtmax, 'd.m.Y'); ?>"});
          <?php
            if ($dtfrom == '')
              {echo 'jQuery("#dtfrom").datepicker("setDate","'.$dtmin.'");';} else
              {echo 'jQuery("#dtfrom").datepicker("setDate","'.$dtfrom.'");';}
            if ($dtto == '')
              {echo 'jQuery("#dtto").datepicker("setDate","'.$dtmax.'");';} else
              {echo 'jQuery("#dtto").datepicker("setDate","'.$dtto.'");';}
          ?>
        });</script>
        <div class="dt-filter">
          <span><?php echo JText::_('COM_MFO_FILTER_DT_1'); ?></span><input type="text" class="datepicker" name="dtfrom" id="dtfrom" readonly />
          <span><?php echo JText::_('COM_MFO_FILTER_DT_2'); ?></span><input type="text" class="datepicker" name="dtto" id="dtto" readonly />
          <a class="btn btn-warning btn-small" href="javascript:UpdateFilter()"><?php echo JText::_('COM_MFO_FILTER_APPLY'); ?></a>
          <a class="btn btn-warning btn-small" href="javascript:ClearFilter()"><?php echo JText::_('COM_MFO_FILTER_CLEAR'); ?></a>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <table class="table table-bordered table-striped table-hover">
          <thead>
            <tr>
              <th rowspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_ODATE'); ?></th>
              <th rowspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_DOCNAME'); ?></th>
              <th colspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_A'); ?></th>
              <th colspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_P'); ?></th>
              <?php if ($is_contributions) : ?>
                <th colspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_C'); ?></th>
              <?php endif; ?>
              <th colspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_S'); ?></th>
            </tr>
            <tr>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_AD'); ?></th>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_AC'); ?></th>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__D'); ?></th>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__C'); ?></th>
              <?php if ($is_contributions) : ?>
                <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__D'); ?></th>
                <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__C'); ?></th>
              <?php endif; ?>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__D'); ?></th>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__C'); ?></th>
            </tr>
          </thead>
          <tbody>
            <?php $id_item = 0;
            if (count($this->items)) :             
              $adebet_all = 0;
              $acredit_all = 0;
              $pdebet_all = 0;
              $pcredit_all = 0;
              $cdebet_all = 0;
              $ccredit_all = 0;
              $sdebet_all = 0;
              $scredit_all = 0;
              foreach ($this->items as $i => $item) :
                $id_item++; ?>
                <?php $brd = $id_item == 1 ? ' top-brd' : ''; ?>
                <tr>
                  <td class="hc <?php echo $brd; ?>"><?php echo JHtml::_('date', $item->odate, 'd.m.Y'); ?></td>
                  <td class="   <?php echo $brd; ?>"><?php echo $item->docname; ?></td>
                  <td class="hr <?php echo $brd; ?>"><?php if ($item->adebet  != 0) {$adebet_all += $item->adebet; echo number_format($item->adebet,2,$dcs,$ths);} ?></td>
                  <td class="hr <?php echo $brd; ?>"><?php if ($item->acredit != 0) {$acredit_all += $item->acredit; echo number_format($item->acredit,2,$dcs,$ths);} ?></td>
                  <td class="hr <?php echo $brd; ?>"><?php if ($item->pdebet  != 0) {$pdebet_all += $item->pdebet; echo number_format($item->pdebet,2,$dcs,$ths);} ?></td>
                  <td class="hr <?php echo $brd; ?>"><?php if ($item->pcredit != 0) {$pcredit_all += $item->pcredit; echo number_format($item->pcredit,2,$dcs,$ths);} ?></td>
                  <?php if ($is_contributions) : ?>
                    <td class="hr <?php echo $brd; ?>"><?php if ($item->cdebet  != 0) {$cdebet_all += $item->cdebet; echo number_format($item->cdebet,2,$dcs,$ths);} ?></td>
                    <td class="hr <?php echo $brd; ?>"><?php if ($item->ccredit != 0) {$ccredit_all += $item->ccredit; echo number_format($item->ccredit,2,$dcs,$ths);} ?></td>
                  <?php endif; ?>
                  <td class="hr <?php echo $brd; ?>"><?php if ($item->sdebet  != 0) {$sdebet_all += $item->sdebet; echo number_format($item->sdebet,2,$dcs,$ths);} ?></td>
                  <td class="hr <?php echo $brd; ?>"><?php if ($item->scredit != 0) {$scredit_all += $item->scredit; echo number_format($item->scredit,2,$dcs,$ths);} ?></td>
                </tr>
              <?php
              endforeach; ?>
            <?php else : ?>
              <tr><td colspan="10" class="top-brd"><?php echo JText::_('COM_MFO_TABLE_NO_DATA'); ?></td></tr>
            <?php endif; ?>
          </tbody>
          <tfoot>
            <?php if (count($this->items)) : ?>
              <tr>
                <td colspan="2" class="top-brd hr"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_FOOT_1'); ?></td>
                <td class="top-brd hr"><?php echo number_format($adebet_all,2,$dcs,$ths); ?></td>
                <td class="top-brd hr"><?php echo number_format($acredit_all,2,$dcs,$ths); ?></td>
                <td class="top-brd hr"><?php echo number_format($pdebet_all,2,$dcs,$ths); ?></td>
                <td class="top-brd hr"><?php echo number_format($pcredit_all,2,$dcs,$ths); ?></td>
                <?php if ($is_contributions) : ?>
                  <td class="top-brd hr"><?php echo number_format($cdebet_all,2,$dcs,$ths); ?></td>
                  <td class="top-brd hr"><?php echo number_format($ccredit_all,2,$dcs,$ths); ?></td>
                <?php endif; ?>
                <td class="top-brd hr"><?php echo number_format($sdebet_all,2,$dcs,$ths); ?></td>
                <td class="top-brd hr"><?php echo number_format($scredit_all,2,$dcs,$ths); ?></td>
              </tr>
            <?php endif; ?>
            <tr><td colspan="10" class="top-brd"></td></tr>
          </tfoot>
        </table>
      </div>
    </div>

  </form>
</div>
[/spoiler]

[spoiler title=Модель documc]
Код: php
<?php
defined('_JEXEC') or die;

jimport('joomla.application.component.modellist');

class MfoModelDocumc extends JModelList
{

  public function getForm($data = array(), $loadData = true)
  {
    $form = $this->loadForm($this->option.'.documc', 'documc', array('control'=>'jform', 'load_data'=>$loadData));
    if (empty($form)) {return false;}
    return $form;
  }

  protected function getListQuery()
  {
    $ulogin = JFactory::getUser()->username;
    $loan = JFactory::getApplication()->input->getString('loan', '');
    $dtfrom = JFactory::getApplication()->input->getString('dtfrom');
    $dtto = JFactory::getApplication()->input->getString('dtto');
    $dtmin = substr($dtfrom,6,4).'-'.substr($dtfrom,3,2).'-'.substr($dtfrom,0,2);
    $dtmax = substr($dtto,6,4).'-'.substr($dtto,3,2).'-'.substr($dtto,0,2);

    $db = JFactory::getDBO();
   
    if (($dtmin == '--') or ($dtmax == '--')) {
      $query = 'select min(odate), max(odate) from #__mfo_docums where (client = '.$db->quote($ulogin).') and (loan = '.$db->quote($loan).')';
      $item = $db->setQuery($query)->loadRow();
      $dtmin = $item[0];
      $dtmax = $item[1];
    }

    $query = $db->getQuery(true);
    $query->select('odate, docname, adebet, acredit, pdebet, pcredit, cdebet, ccredit, sdebet, scredit');
    $query->from('#__mfo_docums');
    $query->where('(client = '.$db->quote($ulogin).')');
    $query->where('(loan = '.$db->quote($loan).')');
    $query->where('(odate between '.$db->quote($dtmin).' and '.$db->quote($dtmax).')');
    $query->order('odate, id');
    return $query;
  }
 
  public function work()
  {
    return true;
  }

}
[/spoiler]
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Прошу помощи в переделке вьюхи с фильтрацией с get на post.
Вопрос с url при применении работы с фильтром остается открытым.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Даа.. ваш код это что то с чем то.. без сто грам.. да каких там сто грамм.. тут литр нужно что бы разобраться...
Что такое MVC вы не поняли...
а в URL у вас всякая хрень передается банально по одной причине:  method="get" в форме! Смените на POST или уберите в форме:
<input type="hidden" name="option" value="com_mfo" />
<input type="hidden" name="view" value="documc" />
а вместо этого в action формы напишите
<form action="<?php echo JRoute::_('index.php?view=documc'); ?>" method="get" name="adminForm" id="adminForm" class="form-horizontal">
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Разберу ваши банальные ошибки:
$llist = '';
if ($list == '1') $llist = 'c';
if ($list == '2') $llist = 'd';
зачем вы передаете число и потом его конвертаете в символ? Может передать число и использовать чисто? Или передать символ и использовать символ?
вот это тоже: $list == '1' зачем вы число взяли в кавычки? У вас же это число, а не строка!

Так же как и тут зачем получаете число как строку??
$list = JFactory::getApplication()->input->getString('list', '0');
идеально будет написать так:
$input = JFactory::getApplication()->input;
$list = $input->getString('list', 0) == 1 ? 'c' : 'd';

Про запросы во вьюхе  я промолчу..

А эта простыня тоже шедевр:
Спойлер
[свернуть]

Которую можно сократить до:
приблизительно до:
Спойлер
[свернуть]

не совсем понимаю зачем вы простыню JS кода на подключение языка к датапикеру пихаете в head страницы через $document->addScriptDeclaration ?
Запихните этот кусок в конец файла /media/com_mfo/js/jquery-ui-1.10.4.custom.js
Так же как и содержимое CSS файлов jquery-ui-1.10.4.custom.css и com_mfo_front.css можно объединить в один файл!

Просто страшно если вы будете подобное распространять среди клиентов конторы )

p.s. модель страшно смотреть ))
« Последнее редактирование: 27.06.2014, 01:25:59 от Istaan »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Посмотрел в модель не все так печально..
но есть пару замечаний...
1. пишите вы под Joomla 3.0 (судя по этой вставке JHtml::_('bootstrap.tooltip'); JHtml::_('jquery.framework'); ибо они пахать в 2.5 не будут)
а если пишете под 3.0 то эта строке jimport('joomla.application.component.modellist'); нафиг не нужна.. удалите её!

2. зачем это:
public function getForm($data = array(), $loadData = true)
  {
    $form = $this->loadForm($this->option.'.documc', 'documc', array('control'=>'jform', 'load_data'=>$loadData));
    if (empty($form)) {return false;}
    return $form;
  }
у вас же модель списка, а не формы! И никакая форма же не выводится!

3. $dtmin = substr($dtfrom,6,4).'-'.substr($dtfrom,3,2).'-'.substr($dtfrom,0,2);
Это пять )
А
$date = JFactory::getDate( '27.06.2014' )->format( 'Y-m-d' );
Не пробовали?)


4. Как и в прошлом варианте, если у вас одно использование какого либо функционала то да можно написать так:
 $loan = JFactory::getApplication()->input->getString('loan', '');
но если несколько то лучше будет так:
Код: php
$input = JFactory::getApplication()->input;
$loan = $input->getString( 'loan', '' );
$dtmin = JFactory::getDate( $input->getString( 'dtfrom', '' ) )->format( 'Y-m-d' );
$dtmax = JFactory::getDate( $input->getString( 'dtto', '' ) )->format( 'Y-m-d' );

5. Этот запрос вообще лишний!
if (($dtmin == '--') or ($dtmax == '--')) {
      $query = 'select min(odate), max(odate) from #__mfo_docums where (client = '.$db->quote($ulogin).') and (loan = '.$db->quote($loan).')';
      $item = $db->setQuery($query)->loadRow();
      $dtmin = $item[0];
      $dtmax = $item[1];
}

Зачем вы выбираете минимальную и максимальную дату? Если дата не пришла так зачем выбирать и врубать диапазон в запрос?


$query = $db->getQuery(true);
$query->select('odate, docname, adebet, acredit, pdebet, pcredit, cdebet, ccredit, sdebet, scredit');
$query->from('#__mfo_docums');
$query->where('(client = '.$db->quote($ulogin).')');
$query->where('(loan = '.$db->quote($loan).')');
if($input->getString( 'dtfrom', '' )  !== '--' && $input->getString( 'dtfrom', '' )  !== '--'){
   $query->where('(odate between '.$db->quote($dtmin).' and '.$db->quote($dtmax).')');
   //Ведь без этой строки итак выберется из диапазона возможных дат!
}
$query->order('odate, id');


А ещё немножко вводит в ступор разные подходы в написании запросов, то у вас объектная модель для построения запросов, то обычная строка ) Вы уж определитесь так или так хотите!
И ещё почему вы храните в поле client username пользователя, а не id? А если кому то взбрендит переименовать юзера?
« Последнее редактирование: 27.06.2014, 01:47:36 от Istaan »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Премного благодарен за критику. Постараюсь объяснить по порядку.
Вьюха:
1.
Цитировать
в URL у вас всякая хрень передается банально по одной причине:  method="get" в форме! Смените на POST или уберите в форме:
<input type="hidden" name="option" value="com_mfo" />
<input type="hidden" name="view" value="documc" />
поля убрал, url при фильтрации более-менее выровнялся: /credits/documc.html?loan=ЗВ%2F31%2F28.03.2013&list=0&dtfrom=03.05.2013&dtto=31.10.2013
чтобы сменить на post, надо менять состояние модели (#214) - не понял, как это работает.

2.
[spoiler title=$list]
Код
$llist = '';
if ($list == '1') $llist = 'c';
if ($list == '2') $llist = 'd';
зачем вы передаете число и потом его конвертаете в символ? Может передать число и использовать чисто? Или передать символ и использовать символ?
вот это тоже: $list == '1' зачем вы число взяли в кавычки? У вас же это число, а не строка!

Так же как и тут зачем получаете число как строку??
$list = JFactory::getApplication()->input->getString('list', '0');
идеально будет написать так:
$input = JFactory::getApplication()->input;
$list = $input->getString('list', 0) == 1 ? 'c' : 'd';
[/spoiler]
Этот косяк давно понял, руки не доходили ))

3.
Цитировать
Про запросы во вьюхе  я промолчу..
А может не стоило?

4.
Цитировать
А эта простыня тоже шедевр:
Спойлер
[свернуть]

Которую можно сократить до:
приблизительно до:

Спойлер
[свернуть]
Конструкция с foreach($rowsList as $key => $value): для меня несколько сложновата пока, изучу.

5.
Цитировать
не совсем понимаю зачем вы простыню JS кода на подключение языка к датапикеру пихаете в head страницы через $document->addScriptDeclaration ?
Запихните этот кусок в конец файла /media/com_mfo/js/jquery-ui-1.10.4.custom.js
Так же как и содержимое CSS файлов jquery-ui-1.10.4.custom.css и com_mfo_front.css можно объединить в один файл!
скрипт уберу в отдельный файл, это просто на скорую руку, а объединять с файлами jquery-ui не хочу: если последний обновится, меньше гемора с правками

Модель:
1. Да, пишу под J3, а поскольку дока под J2.5 c joomlablog, то по образцу и сделал. Доки по разработке компонентов пол J3 на русском пока еще не нашел (да и исках плохо, если уж честно).

2.
Цитировать
зачем это:
public function getForm($data = array(), $loadData = true)
  {
    $form = $this->loadForm($this->option.'.documc', 'documc', array('control'=>'jform', 'load_data'=>$loadData));
    if (empty($form)) {return false;}
    return $form;
  }
у вас же модель списка, а не формы! И никакая форма же не выводится!
Так во вьюхе же форма (список в форме), или я что-то не понял? Хотя и без этого работает.

3.
Цитировать
$dtmin = substr($dtfrom,6,4).'-'.substr($dtfrom,3,2).'-'.substr($dtfrom,0,2);
Это пять )
А
$date = JFactory::getDate( '27.06.2014' )->format( 'Y-m-d' );
Не пробовали?)
Подобное преобразование строк - из долгого опыта работы паскаля, там это быстрее, чем явные преобразования.
Ваш вариант работает, хотя подобные неявные преобразования после delphi несколько пугают ))
Сделал так: $dtmin = JFactory::getDate($input->getString('dtfrom'))->format('Y-m-d');

4.
Цитировать
Как и в прошлом варианте, если у вас одно использование какого либо функционала то да можно написать так:
 $loan = JFactory::getApplication()->input->getString('loan', '');
но если несколько то лучше будет так:
Код

$input = JFactory::getApplication()->input;
$loan = $input->getString( 'loan', '' );
$dtmin = JFactory::getDate( $input->getString( 'dtfrom', '' ) )->format( 'Y-m-d' );
$dtmax = JFactory::getDate( $input->getString( 'dtto', '' ) )->format( 'Y-m-d' );
Это тоже знаю, вылизывание было в планах на потом, после реализации всего компонента. Поправил сейчас )

5.
Спойлер
[свернуть]
не дотумкал сходу. Однако ваш вариант выдал пустой список, поскольку $dtmin = substr($dtfrom,6,4).'-'.substr($dtfrom,3,2).'-'.substr($dtfrom,0,2); более нет, то при отсутствующих dtfrom и dtto (при первичном открытии вьюхи), имхо, правильнее так:
if ($input->getString('dtfrom', '')!== '' && $input->getString('dtfrom', '')!== '')
  $query->where('(odate between '.$db->quote($dtmin).' and '.$db->quote($dtmax).')');

6. Приведение запросов к объектной модели тоже запланировано на потом.
« Последнее редактирование: 27.06.2014, 10:10:13 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
$list = $input->getString('list', 0) == 1 ? 'c' : 'd'; - эта конструкция подразумевает 2 значения, 'c' и 'd', а мне надо также еще и пустое знчение ''.
Решил напрямую передавать символ или вообще не передавать параметр при пустом значении.

if($is_contributions && in_array($key, $exclude)) continue; возможно !is_contributions
« Последнее редактирование: 27.06.2014, 11:11:57 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
$list = $input->getString('list', 0) == 1 ? 'c' : 'd'; - эта конструкция подразумевает 2 значения, 'c' и 'd', а мне надо также еще и пустое знчение ''.
Решил напрямую передавать символ или вообще не передавать параметр при пустом значении.

if($is_contributions && in_array($key, $exclude)) continue; возможно !is_contributions
ага именно забыл не дописать.. да и без теста же все писал )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А как переделать на post, сохранив фильтрацию, так и не понял про состояние модели ничего.

Сейчас все выглядит так:
[spoiler title=модель]
Код: php
<?php defined('_JEXEC') or die;

class MfoModelDocumc extends JModelList
{

  protected function getListQuery()
  {
    $ulogin = JFactory::getUser()->username;
    $input = JFactory::getApplication()->input;
    $loan = $input->getString('loan', '');
    $dtmin = JFactory::getDate($input->getString('dtfrom', ''))->format('Y-m-d');
    $dtmax = JFactory::getDate($input->getString('dtto', ''))->format('Y-m-d');
    //print_r($dtmin);

    $db = JFactory::getDBO();
    $query = $db->getQuery(true);
    $query->select('odate, docname, adebet, acredit, pdebet, pcredit, cdebet, ccredit, sdebet, scredit')
          ->from('#__mfo_docums')
          ->where('(client = '.$db->quote($ulogin).')')
          ->where('(loan = '.$db->quote($loan).')');
    if ($input->getString('dtfrom', '')!== '' && $input->getString('dtfrom', '')!== '')
      $query->where('(odate between '.$db->quote($dtmin).' and '.$db->quote($dtmax).')');
    $query->order('odate, id');
    return $query;
  }
 
  public function work()
  {
    return true;
  }

}
[/spoiler]
[spoiler title=вьюха]
Код: php
<?php defined('_JEXEC') or die;
JHtml::_('bootstrap.tooltip');
JHtml::_('jquery.framework');
$document = JFactory::getDocument();
$document->addStyleSheet('/media/com_mfo/css/jquery-ui-1.10.4.custom.css');
$document->addStyleSheet('/media/com_mfo/css/com_mfo_front.css');
$document->addScript('/media/com_mfo/js/jquery-ui-1.10.4.custom.js');
$document->addScript('/media/com_mfo/js/com_mfo.js');

$input = JFactory::getApplication()->input;
$loan = $input->getString('loan', '');
$list = $input->getString('list', '');
$dtfrom = $input->getString('dtfrom', '');
$dtto = $input->getString('dtto', '');

$ulogin = JFactory::getUser()->username;

$params = JComponentHelper::getParams('com_mfo');
$dcs = $params->get('mfo_decimal_separator', '.');
$ths = $params->get('mfo_thousands_separator', ' ');
if ($ths == '=') $ths = '';
$is_contributions = $params->get('mfo_is_contributions_columns', 0);

$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('min(odate), max(odate)')
      ->from('#__mfo_docums')
      ->where('client = '.$db->quote($ulogin))
      ->where('loan = '.$db->quote($loan));
$item_minmax = $db->setQuery($query)->loadRow();
$dtmin = JHtml::_('date', $item_minmax[0], 'd.m.Y');
$dtmax = JHtml::_('date', $item_minmax[1], 'd.m.Y');

$documc_js = '
jQuery(function($) {
  UpdateFilter = function() {
    $("#loading").css("display", "block");
    $("#adminForm").submit();
  };
 
  ClearFilter = function() {
    $("#loading").css("display", "block");
    $("#dtfrom").val("");
    $("#dtto").val("");
    $("#adminForm").submit();
  };
});

jQuery(document).ready(function($)
{
  var outerDiv = $(\'body\');
  $(\'<div id="loading"><div class="popup"><div class="loader"><div class="loader-label">'.JText::_('COM_MFO_FTP_UPDATE_POPUP', true).'</div></div></div></div>\').appendTo(outerDiv);
});';
$document->addScriptDeclaration($documc_js);
?>
<div id="mfo" class="clearfix" >
  <h1><?php echo JText::sprintf('COM_MFO_H_DOCUMC', $loan); ?></h1>
  <hr />
  <form action="?" method="get" name="adminForm" id="adminForm" class="form-horizontal">
    <div>
      <input type="hidden" name="loan" value="<?php echo $loan; ?>" />
      <input type="hidden" name="list" value="<?php echo $list; ?>" />
    </div>
   
    <div class="control-group">
      <div class="controls">
        <?php
          $query = 'select lupdate from #__mfo_users where client = '.$db->quote($ulogin);
          $item_lu = $db->setQuery($query)->loadResult();
          echo '<span class="mfo-lupdate">'.JText::sprintf('COM_MFO_FTP_LASTUPDATE', JHtml::_('date', $item_lu, 'd.m.Y H:i')).'</span>';
        ?>
      </div>
    </div>
    <div class="control-group">
      <div class="controls">
        <a class="btn btn-info mfo-breturn" href="index.php?view=loans<?php echo $list; ?>"><?php echo JText::_('COM_MFO_RETURN');?></a>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <h4><?php echo JText::_('COM_MFO_H_DOCUMS_L'); ?></h4>
        <?php
          $query = $db->getQuery(true);
          $query->select('bdate, edate, term, prc, sm, rest, arest, prest, crest, srest')
                ->from('#__mfo_loans')
                ->where('client = '.$db->quote($ulogin))
                ->where('num = '.$db->quote($loan));
          $item_loan = $db->setQuery($query)->loadObject();
          $rests = $item_loan->arest+$item_loan->prest+$item_loan->srest;
          if ($is_contributions) $rests += $item_loan->crest;
          echo '<div class="loan-info">';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_BDATE').' <span>'.JHtml::_('date', $item_loan->bdate, 'd.m.Y').'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_EDATE').' <span>'.JHtml::_('date', $item_loan->edate, 'd.m.Y').'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_TERM').' <span>'.$item_loan->term.'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_PRC').' <span>'.number_format($item_loan->prc,4,'.','').'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_SM').' <span>'.number_format($item_loan->sm,2,$dcs,$ths).'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_REST').' <span>'.number_format($item_loan->rest,2,$dcs,$ths).'</span></div>';
          echo '<div class="loan-label">'.JText::_('COM_MFO_TABLE_DOCUMС_LABEL_RESTS').' <span>'.number_format($rests,2,$dcs,$ths).'</span></div>';
          echo '</div>';
        ?>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <h4><?php echo JText::_('COM_MFO_H_DOCUMS'); ?></h4>
        <script>jQuery(function(){
          var form = document.getElementById('adminForm');
          jQuery("#dtfrom").datepicker({dateFormat:"dd.mm.yy",changeMonth:true,changeYear:true,showButtonPanel:true,minDate:"<?php echo JHtml::_('date', $dtmin, 'd.m.Y'); ?>",maxDate:"<?php echo JHtml::_('date', $dtmax, 'd.m.Y'); ?>"});
          jQuery("#dtto").datepicker({dateFormat:"dd.mm.yy",changeMonth:true,changeYear:true,showButtonPanel:true,minDate:"<?php echo JHtml::_('date', $dtmin, 'd.m.Y'); ?>",maxDate:"<?php echo JHtml::_('date', $dtmax, 'd.m.Y'); ?>"});
          <?php
            if ($dtfrom == '')
              {echo 'jQuery("#dtfrom").datepicker("setDate","'.$dtmin.'");';} else
              {echo 'jQuery("#dtfrom").datepicker("setDate","'.$dtfrom.'");';}
            if ($dtto == '')
              {echo 'jQuery("#dtto").datepicker("setDate","'.$dtmax.'");';} else
              {echo 'jQuery("#dtto").datepicker("setDate","'.$dtto.'");';}
          ?>
        });</script>
        <div class="dt-filter">
          <span><?php echo JText::_('COM_MFO_FILTER_DT_1'); ?></span><input type="text" class="datepicker" name="dtfrom" id="dtfrom" readonly />
          <span><?php echo JText::_('COM_MFO_FILTER_DT_2'); ?></span><input type="text" class="datepicker" name="dtto" id="dtto" readonly />
          <a class="btn btn-warning btn-small" href="javascript:UpdateFilter()"><?php echo JText::_('COM_MFO_FILTER_APPLY'); ?></a>
          <a class="btn btn-warning btn-small" href="javascript:ClearFilter()"><?php echo JText::_('COM_MFO_FILTER_CLEAR'); ?></a>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <table class="table table-bordered table-striped table-hover">
          <thead>
            <tr>
              <th rowspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_ODATE'); ?></th>
              <th rowspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_DOCNAME'); ?></th>
              <th colspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_A'); ?></th>
              <th colspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_P'); ?></th>
              <?php if ($is_contributions) : ?>
                <th colspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_C'); ?></th>
              <?php endif; ?>
              <th colspan="2"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_S'); ?></th>
            </tr>
            <tr>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_AD'); ?></th>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС_AC'); ?></th>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__D'); ?></th>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__C'); ?></th>
              <?php if ($is_contributions) : ?>
                <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__D'); ?></th>
                <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__C'); ?></th>
              <?php endif; ?>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__D'); ?></th>
              <th class="cipher"><?php echo JText::_('COM_MFO_TABLE_DOCUMС__C'); ?></th>
            </tr>
          </thead>
          <tbody>
            <?php $id_item = 0;
            if (count($this->items)) {             
              $rowsList = array('adebet' => 0, 'acredit' => 0, 'pdebet' => 0, 'pcredit' => 0, 'cdebet' => 0, 'ccredit' => 0, 'sdebet' => 0, 'scredit' => 0);
              $exclude = array('cdebet', 'ccredit');
              foreach ($this->items as $i => $item) {
                $id_item++;
                $brd = $id_item == 1 ? ' top-brd' : '';
                echo '<tr>';
                  echo '<td class="hc'.$brd.'">'.JHtml::_('date', $item->odate, 'd.m.Y').'</td>';
                  echo '<td class="'.$brd.'">'.$item->docname.'</td>';
                foreach($rowsList as $key => $value) {
                    if(!$is_contributions && in_array($key, $exclude)) continue;
                    $rowsList[$key] += $item->$key;
                    echo '<td class="hr'.$brd.'">'.number_format($item->$key,2,$dcs,$ths).'</td>';
                  }
                echo '</tr>';
              }
            } else {echo '<tr><td colspan="10" class="top-brd">'.JText::_('COM_MFO_TABLE_NO_DATA').'</td></tr>';} ?>
          </tbody>
          <tfoot>
            <?php if (count($this->items)) {
              echo '<tr>';
                echo '<td colspan="2" class="hr top-brd">'.JText::_('COM_MFO_TABLE_DOCUMС_FOOT_1').'</td>';
              foreach($rowsList as $key => $value) {
                  if (!$is_contributions && in_array($key, $exclude)) continue;
                  echo '<td class="hr top-brd">'.number_format($rowsList[$key],2,$dcs,$ths).'</td>';
                }
              echo '</tr>';
            } ?>
            <tr><td colspan="10" class="top-brd"></td></tr>
          </tfoot>
        </table>
      </div>
    </div>

  </form>
</div>
[/spoiler]
[spoiler title=контроллер]
Код: php
<?php defined('_JEXEC') or die;

class MfoControllerDocumc extends JControllerLegacy
{
  public function work()
  {
    $uri = JFactory::getURI();
    JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
    $model = $this->getModel('documc');
    $model->work();
    $this->setRedirect(JRoute::_($uri));
  }
}
[/spoiler]
« Последнее редактирование: 27.06.2014, 11:47:36 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
3. А может не стоило?
Ну а что говорить, запросы должны быть в модели а не во вьюхе ))

1. Да, пишу под J3, а поскольку дока под J2.5 c joomlablog, то по образцу и сделал. Доки по разработке компонентов пол J3 на русском пока еще не нашел (да и исках плохо, если уж честно).
Практически ничем не отличается разработка j2.5 от j3.0 кроме того что не надо подрубать через jimport классы нужные для моделей, контроллеров и вьюх! У меня в подписи ссылка на сервис для создания каркасов компоненто, можете сгенерить для 2.5 и 3.2 и посмотреть разницу!

2. Так во вьюхе же форма (список в форме), или я что-то не понял? Хотя и без этого работает.
у вас не так форма для которой используется метод getForm! Этот метод для построения формы через XML файл! И выводится потом форма через
<?php echo $this->form->getLabel( 'title' ); ?>
<?php echo $this->form->getInput( 'title' ); ?>
В данном случае у фас форма банально для сортировки данных каких то.. и ничего не имеет общего с JForm!

3. Подобное преобразование строк - из долгого опыта работы паскаля, там это быстрее, чем явные преобразования.
Ваш вариант работает, хотя подобные неявные преобразования после delphi несколько пугают ))
Сделал так: $dtmin = JFactory::getDate($input->getString('dtfrom'))->format('Y-m-d');
Не думаю что у вас проект с высокой нагрузкой в которой нужно переживать о скорости операторов!

5.
Спойлер
[свернуть]
не дотумкал сходу. Однако ваш вариант выдал пустой список, поскольку $dtmin = substr($dtfrom,6,4).'-'.substr($dtfrom,3,2).'-'.substr($dtfrom,0,2); более нет, то при отсутствующих dtfrom и dtto (при первичном открытии вьюхи), имхо, правильнее так:
if ($input->getString('dtfrom', '')!== '' && $input->getString('dtfrom', '')!== '')
  $query->where('(odate between '.$db->quote($dtmin).' and '.$db->quote($dtmax).')');
Ну тут понято что я писал на угад и без тестинга в час ночи и мог ошибиться )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Ну а что говорить, запросы должны быть в модели а не во вьюхе ))
Не спорю, тогда как это:
Код: php
          $query = $db->getQuery(true);
          $query->select('bdate, edate, term, prc, sm, rest, arest, prest, crest, srest')
                ->from('#__mfo_loans')
                ->where('client = '.$db->quote($ulogin))
                ->where('num = '.$db->quote($loan));
          $item_loan = $db->setQuery($query)->loadObject();
и это:
Код: php
$query = $db->getQuery(true);
$query->select('min(odate), max(odate)')
      ->from('#__mfo_docums')
      ->where('client = '.$db->quote($ulogin))
      ->where('loan = '.$db->quote($loan));
$item_minmax = $db->setQuery($query)->loadRow();
$dtmin = JHtml::_('date', $item_minmax[0], 'd.m.Y');
$dtmax = JHtml::_('date', $item_minmax[1], 'd.m.Y');
можно спрятать в модель и потом получить во вьюхе?

В данном случае у фас форма банально для сортировки данных каких то.. и ничего не имеет общего с JForm!
Возможно, имеет смысл отказаться от формы вообще? Тогда как передавать данные фильтрации для запроса в модель?

Не думаю что у вас проект с высокой нагрузкой в которой нужно переживать о скорости операторов!
предположительно, до 3000 сессий одновременно, имхо, не критично.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Не спорю, тогда как это:
Код: php
          $query = $db->getQuery(true);
          $query->select('bdate, edate, term, prc, sm, rest, arest, prest, crest, srest')
                ->from('#__mfo_loans')
                ->where('client = '.$db->quote($ulogin))
                ->where('num = '.$db->quote($loan));
          $item_loan = $db->setQuery($query)->loadObject();
и это:
Код: php
$query = $db->getQuery(true);
$query->select('min(odate), max(odate)')
      ->from('#__mfo_docums')
      ->where('client = '.$db->quote($ulogin))
      ->where('loan = '.$db->quote($loan));
$item_minmax = $db->setQuery($query)->loadRow();
$dtmin = JHtml::_('date', $item_minmax[0], 'd.m.Y');
$dtmax = JHtml::_('date', $item_minmax[1], 'd.m.Y');
можно спрятать в модель и потом получить во вьюхе?
Да легко

в модели:
public functoin getData(){
          $db = JFactory::getDbo();
          $query = $db->getQuery(true);      
          $query->select('bdate, edate, term, prc, sm, rest, arest, prest, crest, srest')
                ->from('#__mfo_loans')
                ->where('client = '.$db->quote($ulogin))
                ->where('num = '.$db->quote($loan));
          return $db->setQuery($query)->loadObject();
}

во вьюхе в методе display()
$this->data = $this->get('data');

В шаблоне вида уже работаете с $this->datata->bdate ...

Возможно, имеет смысл отказаться от формы вообще? Тогда как передавать данные фильтрации для запроса в модель?
Без формы только с сохранением состояний, но у вас оно что то не получается, да как по мне проще с формой!

*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как все просто однако, век живи - век учись =) Вы бы не подсказали - так и косячил бы дальше.
[spoiler title=Модель сейчас:]
Код: php
<?php defined('_JEXEC') or die;

class MfoModelDocumc extends JModelList
{

  protected function getListQuery()
  {
    $ulogin = JFactory::getUser()->username;
    $input = JFactory::getApplication()->input;
    $loan = $input->getString('loan', '');
    $dtmin = JFactory::getDate($input->getString('dtfrom', ''))->format('Y-m-d');
    $dtmax = JFactory::getDate($input->getString('dtto', ''))->format('Y-m-d');

    $db = JFactory::getDBO();
    $query = $db->getQuery(true);
    $query->select('odate, docname, adebet, acredit, pdebet, pcredit, cdebet, ccredit, sdebet, scredit')
          ->from('#__mfo_docums')
          ->where('(client = '.$db->quote($ulogin).')')
          ->where('(loan = '.$db->quote($loan).')');
    if ($input->getString('dtfrom', '')!== '' && $input->getString('dtfrom', '')!== '')
      $query->where('(odate between '.$db->quote($dtmin).' and '.$db->quote($dtmax).')');
    $query->order('odate, id');
    return $query;
  }
 
  public function getLoanData()
  {
    $ulogin = JFactory::getUser()->username;
    $input = JFactory::getApplication()->input;
    $loan = $input->getString('loan', '');
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);     
    $query->select('bdate, edate, term, prc, sm, rest, arest, prest, crest, srest')
          ->from('#__mfo_loans')
          ->where('client = '.$db->quote($ulogin))
          ->where('num = '.$db->quote($loan));
    return $db->setQuery($query)->loadObject();
  }

  public function getDatesRange()
  {
    $ulogin = JFactory::getUser()->username;
    $input = JFactory::getApplication()->input;
    $loan = $input->getString('loan', '');
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('min(odate), max(odate)')
          ->from('#__mfo_docums')
          ->where('client = '.$db->quote($ulogin))
          ->where('loan = '.$db->quote($loan));
    return $db->setQuery($query)->loadRow();
  }

}
[/spoiler]

Во всех функциях дублируются строки:
Код: php
    $ulogin = JFactory::getUser()->username;
    $input = JFactory::getApplication()->input;
    $loan = $input->getString('loan', '');
    $db = JFactory::getDbo();
Как грамотно провести рефакторинг, вынеся, что возможно, отдельно? Возможно, в хелпер?

к тому же, getLoanData() и getDatesRange() используются в нескольких вьюхах.
« Последнее редактирование: 27.06.2014, 12:53:09 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Можно и в хелпер
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Можно и в хелпер
В хелпере функция public function DocumsLoanData(), в модели public function getLoanData() { return MfoHelper::DocumsLoanData(); }
Во фронт: Strict Standards: Non-static method MfoHelper::DocumsLoanData() should not be called statically, assuming $this from incompatible context in \com_mfo\models\documc.php

upd
Сделал function static DocumsLoanData() - strict исчез. На что влияет static, как это работает?
« Последнее редактирование: 27.06.2014, 13:15:38 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
static означает что статичная функция!
Вы же не создаете объект класса хелпера!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Понял, спасибо. А как можно во фронте вызвать хелпер админки? Функция обновления данных из XML очень уж громоздкая получилась, а используется и там и там.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Проинклюдить и пользоваться как обычно.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Проинклюдить и пользоваться как обычно.
спс. я подумал о возможно имеющемся api-методе. А так в админке сделал abstract class MfoAdminHelper() и цепляю статик-функции из него обычным способом, предварительно проинклюдив в самом начале файла, где используется.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Если documc переводить с get на post, правильно ли я понял, что JFactory::getApplication()->input->getString('loan', ''); в хелпере уже не получишь?
И как из функции в хелпере можно вызвать вьюху компонента? JApplication::redirect()?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Если documc переводить с get на post, правильно ли я понял, что JFactory::getApplication()->input->getString('loan', ''); в хелпере уже не получишь?
Нет Неправильно поняли, можно получить где угодно!

И как из функции в хелпере можно вызвать вьюху компонента? JApplication::redirect()?
Никак! Хелпер это помощник вида, он должен помочь отображать какие то данные! Но не вызывать что либо!
Вообще подобным функционалом должен заниматься контроллер!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Хочу из одной вьюхи вызвать другую и передать вызываемой параметр loan так, чтобы он не светился в url
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
MVC. Это разруливает контроллер. Что значит вызвать из одной вьюхи другую? Жмете 'Отправить', "сохранить" или что там у вас. И передаете управление в контроллер, а там уж разруливайте - получить, передать данные в модель, выполнить над ними какие-то действия, вызвать вид, передать данные ему или еще чего.
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Вот все-таки тонкие контроллеры Joomla вводят в заблуждение и усложняют логику. Не всегда ясно что и где.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
MVC. Это разруливает контроллер. Что значит вызвать из одной вьюхи другую? Жмете 'Отправить', "сохранить" или что там у вас. И передаете управление в контроллер, а там уж разруливайте - получить, передать данные в модель, выполнить над ними какие-то действия, вызвать вид, передать данные ему или еще чего.
В одной вьюхе кнопка, по нажатию кнопки открывается другая, в нее передается параметр, на основании значения которого в вызываемой вьюхе отображаются данные.
Можно пример, как это реализуется в контроллере?

Вот все-таки тонкие контроллеры Joomla вводят в заблуждение и усложняют логику. Не всегда ясно что и где.
Эт точно :)
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
В api Joomla не великий спец. До Istaan далеко, да и не нужно. Но. Если в виде форма и она отправляется на сервер, она неминуемо попадает в контроллер. Если конечно Joomla по MVC написана.
Посмотрел тут выше
 <form action="<?php echo JRoute::_('index.php?view=documc'); ?>" method="get" name="adminForm" id="adminForm" class="form-horizontal">
Кстати тут 'index.php?view=documc' похоже компонент не указан.
Что произойдет?
Отработает контроллер по умолчанию. Какой у вас в компоненте контроллер по умолчанию? И отработает метод по умолчанию в этом контроллере. У Joomla вроде метод display() по общему правилу если где-то не переопределен. И этот метод вызовет вид documc. Так и ловите свой GET в методе display() контроллера по умолчанию. В Joomla интересно устроено. Виды получают свои данные из моделей в обход контроллеров. Думаю Неправильно, хотя кому как. Вот и все. Получили данные в контроллере, что-то с ними сделали, потом вызвали нужный вид и передали данные туда. Как по api Joomla это делается уже не помню. А смотреть влом. Что-то типа
$view = $this->getView('documc');
$view->assign('data', $data);
$view->display();
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Отработает контроллер с именем, совпадающем с именем вьюхи.
У меня весь контроллер:
Код: php
class MfoControllerLoans extends JControllerLegacy
{
  public function work()
  {
    $uri = JFactory::getURI();
    JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
    $model = $this->getModel('loans');
    $model->work();
    $this->setRedirect(JRoute::_($uri));
  }
}
И куда тут можно вставить вызов другой вьюхи - а хз... А ж передать этой вьюхе параметр, да еще, при необходимости, не один...
Перерыл инет, накачал книжек - ни слова о подобном.
« Последнее редактирование: 27.06.2014, 23:15:00 от AlekVolsk »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться