Новости 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 Ответов
  • 31646 Просмотров
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Да нет. Хельпер который собственно в БД выборку делает, запроса не получает. Соответственно ничего и не выдает. Перенеси содержимое хелпера в модель в getLoanData.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
так в модуле тоже var_dump($_REQUEST); ничего не выводит, и в контроллере documc print_r(JFactory::getApplication()->input->getString('loan')); - тоже пусто.
Перенеси содержимое хелпера в модель в getLoanData.
Ничего не дало.

Сложилось впечатление, что вызов $this->getView($input->getWord('viewname'),'html')->display(); каким-либо образом открепляет вьюху от своего контроллера.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
$this->getView($input->getWord('viewname'),'html')->display();
прикрепляет вьюху но не модель! Зачем вы подобное делаете не понимаю если система сама поймет какой вид и модель использоваться если вы передадите &view=view_name!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А как правильно?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Я же уже раньше писал!
1. Создайте новый нужный вам вид, например test
2. Идете в виде например так: <a href="<?php echo JRoute::_('index.php?view=test&id=1'); ?>">go</a>
(Если хотите скрыть &id=1) то
<form action="<?php echo JRoute::_('index.php?view=test&id=1'); ?>" method="post"><input type="hidden" name="id" value="1" /><input type="submit" /></form>
3. В модели например метод
public function getItem(){
$input = JFactory::getApplication()->input;
$id = $input->getInt('id', 0);
$query = $this->getDbo()->getQuery(true)-
                   ->select('*')
                   ->from('#__content')
                   ->where('id=' . $id);
return $this->getDbo()->setQuery($query)->loadObject();
}

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

В шаблоне уже юзаете $this->item!
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Вопрос не зачем, а почему. Мне в прошлом году надо было видеть в контроллере, что где вызывается и куда передается. Иначе тоже путался. Вот и подумал, может и AlekVolsk так проще будет. Может зря, запутал только. Да. Спасибо. Не увидел, что модель нигде не вызывается. (не удивительно после 2 л. пива, может потому и разговорился чего-то) ;D
Вызови
$view->setModel('name');
в контроллере. Вместо 'name' имя модели.
Или в виде
$model = $this->getModel(); //вызовется родная модель вида
$input_loan = $model->get('LoanData');
Ну или забудь все и следуй неявным вызовам Joomla как Istaan говорит. По мне так лучше все в руках держать. Свободней как-то.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
По мне так лучше все в руках держать. Свободней как-то.
Писать свой велосипед тоесть ))
Вообще можно сделать так:
$view = $this->getView('view_name', 'html');
$model = $this->getModel('model_name');
$view->setModel($model, true);
$view->display();

Но зачем если почти тоже делает метод display()!
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Ну да велосипед. Зато наглядный. Видно что происходит. Тем более если нужно выдернуть массив option-ов для select-а формы из другой модели или еще чего. Наверняка в Joomla для этого свой инструмент есть. Но пока его найдешь. Да потом еще в исходниках провалишься на 3 уровня (и хорошо еще на 3) наследования, пока поймешь как работает. Так компонент можно долго писать, а работа стоять будет? А инструмент этот потом сам найдется. В процессе работы, если плотно с Joomla работать. Т.е. не все API сразу, но в достаточной степени, чтобы на велосипедах, но готовый продукт появлялся. А полное просветление постепенно придет. Нельзя охватить все сразу и быстро.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Ну да велосипед. Зато наглядный. Видно что происходит.
Но вы же не знаете что происходит в $view->display(); но вы же не пишете свой метод что бы понимать что там проиходит?)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: php
      $view = $this->getView($input->getWord('viewname'),'html');
      $view->setModel($this->getModel('Documc'), true);
      $view->display();
Пока остановился на этом решении, благо работает!

Вопрос не зачем, а почему. Мне в прошлом году надо было видеть в контроллере, что где вызывается и куда передается. Иначе тоже путался.
...
$model = $this->getModel(); //вызовется родная модель вида
$input_loan = $model->get('LoanData');
Взял на заметку, из тех же побуждений.

Наверняка в Joomla для этого свой инструмент есть. Но пока его найдешь. Да потом еще в исходниках провалишься на 3 уровня (и хорошо еще на 3) наследования, пока поймешь как работает.
Ага, самая хитро-в-жопу-выебанная кмс, 2л мне сегодня будет мало :)

Так компонент можно долго писать
Уже 3 мес, и это явно даже не середина... А к нему толпу модулей и сис.плагин... А еще оптимизация вьюх под адаптивную верстку...

Парни, респект Вам в виде Блаодарности!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Теперь самое интересное: фильтрация! При нажатии на кнопки применения/сброса фильтра выкидывает во вьюху по умолчанию, независимо, откуда documc был вызван (возможно вызвать из трех мест).
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Код: php
$view = $this->getView($input->getWord('viewname'),'html');
$view->setModel($this->getModel('Documc'), true);
$view->display();
Вы по сути сделали дубликат метода display который подключает к любому виду только модель Documc!

Теперь самое интересное: фильтрация! При нажатии на кнопки применения/сброса фильтра выкидывает во вьюху по умолчанию, независимо, откуда documc был вызван (возможно вызвать из трех мест).
Значит неправильный адрес у action формы!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
  <form action="<?php echo JRoute::_('index.php'); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal">

upd:
забыл приписать ?view=documc, усе работает!
« Последнее редактирование: 28.06.2014, 19:03:28 от AlekVolsk »
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Но вы же не знаете что происходит в $view->display(); но вы же не пишете свой метод что бы понимать что там проиходит?)
Да я ведь не спорю. Просто рассказал как сам выходил из ситуации когда: с нуля+вдруг+надо+быстро+лень+туплю. А для AlekVolsk, я так понимаю это работа и результаты какие-то уже требуют. Поможет, рад. Помешает, жаль.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
passer, помогло и очень, премного благодарен! Да, работа, срок - 30 числа, а мне еще 14 вьюх рисовать, но уже не сегодня :)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Попробовал это:
2. Идете в виде например так: <a href="<?php echo JRoute::_('index.php?view=test&id=1'); ?>">go</a>
(Если хотите скрыть &id=1) то
<form action="<?php echo JRoute::_('index.php?view=test&id=1'); ?>" method="post"><input type="hidden" name="id" value="1" /><input type="submit" /></form>

Перехожу из loans в documd: href="<?php echo JRoute::_('index.php?view=documd&loan='.$item->num); ?>"
В documd: <form action="<?php echo JRoute::_('index.php?view=documd&loan='.$loan); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal">
<input type="hidden" name="loan" value="<?php echo $loan; ?>" />
В url: /loans/documd.html?loan=ЗП/11/14.01.2014
Не работает! Пока оставил вариант, предложенный passer
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Попробовал это:
Перехожу из loans в documd: href="<?php echo JRoute::_('index.php?view=documd&loan='.$item->num); ?>"
В documd: <form action="<?php echo JRoute::_('index.php?view=documd&loan='.$loan); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal">
<input type="hidden" name="loan" value="<?php echo $loan; ?>" />
В url: /loans/documd.html?loan=ЗП/11/14.01.2014
Не работает! Пока оставил вариант, предложенный passer

Что именно не работает?
И вас в не смутило что у вас в форме в action ссылка JRoute::_('index.php?view=documd&loan='.$loan) конечно у вас в url будет loan=ЗП/11/14.01.2014 вы же его в action пихаете!
А потом ниже ещё и скрытое поле loan может в action стоит оставить JRoute::_('index.php?view=documd')?!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Та по вашему образцу :) :
2. Идете в виде например так: <a href="<?php echo JRoute::_('index.php?view=test&id=1'); ?>">go</a>

Убрал параметр из action - не помогло
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Вьюха documd, на скрине.
Код: php
          <tbody>
            <?php $id_item = 0;
            $exclude = array('rest', 'scredit');
            $sum_ex = array('adebet', 'pdebet');
            if (count($this->items)) {             
              $rowsList = array('adebet' => 0, 'acredit' => 0, 'pdebet' => 0, 'pcredit' => 0, 'ccredit' => 0, 'scredit' => 0, 'rest' => 0);
              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 && ($key == 'scredit')) 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>
Если перехожу во вьюху через jroute, то все ок, колонка "общая сумма" содержит цифры из базы;
если перехожу во вьюху через контроллер, вылазят ошибки (на скрине), rest - поле в базе, как раз последняя колонка, содержит нули вместо шестизначных сумм, ругвется на это:
Код: php
                    $rowsList[$key] += $item->$key;
                    echo '<td class="hr'.$brd.'">'.number_format($item->$key,2,$dcs,$ths).'</td>';
*

b2z

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

Если перехожу во вьюху через jroute, то все ок, колонка "общая сумма" содержит цифры из базы;
если перехожу во вьюху через контроллер, вылазят ошибки (на скрине), rest - поле в базе, как раз последняя колонка, содержит нули вместо шестизначных сумм, ругвется на это:
Через jroute это как? И через контроллер - это как?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
через jroute: во вьюхе ссылка: href="<?php echo JRoute::_('index.php?view=documd&loan='.$item->num); ?>"

через контроллер: во вьюхе ссылка: href="javascript:LoadView('Documd','<?php echo $item->num; ?>',' ')"
js:
Код: javascript
jQuery(function($) {
  LoadView = function(viewname, loan, list)
  {
    $("#loading").css("display", "block");
    $("input[name=\'worktype\']").val("documd");
    $("input[name=\'viewname\']").val(viewname);
    $("input[name=\'loan\']").val(loan);
    $("input[name=\'list\']").val(list);
    $("#adminForm").submit();
  };
});
В контроллере:
Код: php
class MfoControllerLoans extends JControllerLegacy
{

  public function work()
  {
    $uri = JFactory::getURI();
    JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
    $input = JFactory::getApplication()->input;
    $wt = $input->getWord('worktype');
    if ($wt == 'ftpxml') {
      $this->getModel('loans')->FtpXML();
      $this->setRedirect(JRoute::_($uri));
    } elseif ($wt == 'documd') {                   //  выполняется это
      $view = $this->getView($input->getWord('viewname'),'html');
      $view->setModel($this->getModel('Documc'), true);
      $view->display();
    }
  }

}
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Все, догнал, не ту модель цеплял, очепятался, сори за кипишь :)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как во вьюхе вызвать функцию из модели, передав ей параметр?
В модели:
Код: php
  public function getCOConditions($id)
  {
    $db = JFactory::getDbo();
    $query->select('`condition`')
          ->from('#__mfo_credit_offers_conditions')
          ->where('co_id = '.(int)$id);
    return $db->setQuery($query)->loadObjectList();
  }
Пытаюсь вызвать: $list = $this->get('COConditions('.$item->id.')'); - возвращает 0 строк, хотя всегда минимум одна должна быть.
*

Aleks.Denezh

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
ok. master-detail организовать. Список, к каждому элементу списка доп.список условий. Оговорка: это в админке.
Вьюха:
Код: php
      <tbody>
        <?php if (count($this->items)) {
          foreach ($this->items as $i => $item) {
            $list = $this->get('COConditions('.$item->id.')');
            if (count($list)) {$id_cs = 1 + count($list);} else {$id_cs = 2;}?>
            <tr>
              <td class="top-brd" rowspan="2"><?php echo $item->id; ?></td>
              <td class="top-brd"><?php echo $item->offername; ?></td>
              <td class="top-brd hc"><?php echo $item->status; ?></td>
              <td class="top-brd hr"><?php if ($item->sm_from != 0) {echo number_format($item->sm_from,2,$dcs,$ths);} ?></td>
              <td class="top-brd hr"><?php if ($item->sm_to != 0) {echo number_format($item->sm_to,2,$dcs,$ths);} ?></td>
              <td class="top-brd hr"><?php if ($item->prc_from != 0) {echo number_format($item->prc_from,4,'.','');} ?></td>
              <td class="top-brd hr"><?php if ($item->prc_to != 0) {echo number_format($item->prc_to,4,'.','');} ?></td>
              <td class="top-brd hr"><?php if ($item->term_from != 0) {echo $item->term_from;} ?></td>
              <td class="top-brd hr"><?php if ($item->term_to != 0) {echo $item->term_to;} ?></td>
            </tr>
            <tr><td colspan="8"><i>
              <?php if (count($list)) {
                $list_cnt = count($list);
                $list_ii = 1;
                foreach ($list as $listintem) {
                  if ($list_ii == $list_cnt)
                    {echo $listintem->condition;} else
                    {echo $listintem->condition.'<br />';}
                  $list_ii++;
                }
              } else {echo JText::_('COM_MFO_TABLE_CO_CONDITIONALITY_NONE');}
            echo '</i></td></tr>';
          }
        } else {echo '<tr><td colspan="9" class="top-brd">'.JText::_('COM_MFO_TABLE_CO_NO_DATA').'</td></tr>';} ?>
      </tbody>
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
модель
private $item;

public function getItem(){
$this->item = 213;
return  $this->item;
}

public function getCOConditions(){
$db = JFactory::getDbo();
    $query->select('`condition`')
          ->from('#__mfo_credit_offers_conditions')
          ->where('co_id = '.(int)$this->item );
    return $db->setQuery($query)->loadObjectList();
}

Вид:
$this->item = $this->get('Item');
$list = $this->get('COConditions);
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
 foreach ($this->items as $i => $item) {
            $list = $this->get('COConditions('.$item->id.')');
Да по вашим примерам надо учить как не нужно делать ))
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Все банально просто:

в модели:
public function getItems(){
//тут ваш запрос
$list = $db->set$query($query)->loadObjectList( 'id' ); //внимательно смотрите на то что в скобках!

// вот тут создаем ещё один запрос запрос
$query->clear()->select('`condition`')
          ->from('#__mfo_credit_offers_conditions');
$conditions = $db->set$query($query)->loadObjectList();

перебираем все ваши данные:
foreach($conditions as $condition){
  if(isset($list[ $condition->co_id ]){
    $list[ $condition->co_id ]->conditions[] = $condition;
  }
}

return $list;
}

и в виде уже:
  foreach ($this->items as $i => $item) {
            $list = $item->condition;
.....
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Немного не то: надо передать в модель $id.
Раньше во вьюхе внутри цикла был запрос:
Код: php
            //$list = $this->get('COConditions('.$item->id.')'); // вместо этого запрос ниже
            $db = JFactory::getDbo();
            $query->select('`condition`')
                  ->from('#__mfo_credit_offers_conditions')
                  ->where('co_id = '.(int)$item->id);
            $list = $db->setQuery($query)->loadObjectList();
$item->id берется из массива записей, возвращаемых getListQuery()

foreach ($this->items as $i => $item) {
            $list = $this->get('COConditions('.$item->id.')');
Да по вашим примерам надо учить как не нужно делать ))
Так я и пытаюсь так. как нужно, научится ))
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
$item->id берется из массива записей, возвращаемых getListQuery()
Вот тут ваш основной пробел в знаниях! из getListQuery не берется массив записей ) Только запрос ) Метод так и называется получить запрос списка )

А записи получаются с метода getItems! Который определен в родительском классе JModelList!
И вы можете банально переопределить этот метод! То есть копируете  метод getItems из класса JModelList в свою модель!
Вот этот метод:
Код: php
public function getItems()
{
// Get a storage key.
$store = $this->getStoreId();

// Try to load the data from internal storage.
if (isset($this->cache[$store]))
{
return $this->cache[$store];
}

// Load the list items.
$query = $this->_getListQuery();

try
{
$items = $this->_getList($query, $this->getStart(), $this->getState('list.limit'));
}
catch (RuntimeException $e)
{
$this->setError($e->getMessage());

return false;
}

// Add the items to the internal cache.
$this->cache[$store] = $items;

return $this->cache[$store];
}

И вот тут немножко пошаманить и сделать:
Код: php
try
{

$items = $db->setQuery($query, $this->getStart(), $this->getState('list.limit'))->loadObjectList( 'id' ); //внимательно смотрите на то что в скобках!

// вот тут создаем ещё один запрос запрос
$query = $this->getDbo()->getQuery(true)->select('co_id, `condition`')
         ->from('#__mfo_credit_offers_conditions');
        $conditions =$this->getDbo()->setQuery($query)->loadObjectList();

//перебираем все ваши данные:
foreach($conditions as $condition){
   if(isset($items[ $condition->co_id ]){
     $items[ $condition->co_id ]->conditions[] = $condition;
   }
}
}

« Последнее редактирование: 29.06.2014, 21:34:27 от Istaan »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться