Новости Joomla

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: php
  public function getItems()
  {
    $store = $this->getStoreId();
    if (isset($this->cache[$store]))
    {
      return $this->cache[$store];
    }
 
    $query = $this->_getListQuery();
    try
    {
      $items = $this->_getList($query, $this->getStart(), $this->getState('list.limit'));
      $query = $this->getDbo()->getQuery(true)->select('`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;
      }
    }
    catch (RuntimeException $e)
    {
      $this->setError($e->getMessage());
      return false;
    }
 
    $this->cache[$store] = $items;
    return $this->cache[$store];
  }
ругается, не знает, что такое co_id
во вьюхе не знает, что такое condition
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
ругается, не знает, что такое co_id
во вьюхе не знает, что такое condition
Конечно ругается, в запросе же выбирается только condition а co_id  не выбирается )

Я же на глаз пишу, и без редактора, вот и накосячил! по этому дополнить запрос

$query = $this->getDbo()->getQuery(true)->select('co_id, `condition`')->from('#__mfo_credit_offers_conditions');
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
О co_id догадался, уже поправил, а вот что делать с Undefined property: stdClass::$condition  во вьюхе, ругается на $list = $item->condition;
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
О co_id догадался, уже поправил, а вот что делать с Undefined property: stdClass::$condition  во вьюхе, ругается на $list = $item->condition;
if(isset($item->conditions) && count($item->conditions)){
....
}

и вы Неправильно переменную берете там conditions, а не condition  ;) Хотя тоже я обманул, но вы же могли тоже посмотреть что вам возвращает через print_r например  ;)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Хмм, в $item->condition должен содержаться список строк (записей), в базе они есть, однако во вьюху выходит isset($item->condition)=false
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Хмм, в $item->condition должен содержаться список строк (записей), в базе они есть, однако во вьюху выходит isset($item->condition)=false
Список в $item->conditions, а не в $item->condition
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
ппц, список conditions смещается относительно основного списка на 1 (скрин 2)
« Последнее редактирование: 29.06.2014, 22:35:22 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Покажите вывод шаблона!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: php
      <tbody>
        <?php if (count($this->items)) {
          foreach ($this->items as $i => $item) {
            if (isset($item->conditions) && count($item->conditions)) {$list = $item->conditions;
            /*$db = JFactory::getDbo();
            $query = $db->getQuery(true);
            $query->select('`condition`')
                  ->from('#__mfo_credit_offers_conditions')
                  ->where('co_id = '.(int)$item->id);
            $list = $db->setQuery($query)->loadObjectList();*/
          } ?>
            <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 (isset($list) && count($list)) {
                $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++;
                }
              } 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>
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Оно изначально так формируется, перед выводом таблицы var_dump($this->items); :
Код
array(3) { 
  [0]=> object(stdClass)#141 (9) {
    ["id"]=> string(1) "1"
    ["offername"]=> string(32) "Добро пожаловать!"
    ["status"]=> string(1) "2"
    ["sm_from"]=> string(8) "20000.00"
    ["sm_to"]=> string(8) "50000.00"
    ["prc_from"]=> string(7) "18.0000"
    ["prc_to"]=> string(7) "20.0000"
    ["term_from"]=> string(1) "6"
    ["term_to"]=> string(2) "12"
  }
  [1]=> object(stdClass)#142 (10) {
    ["id"]=> string(1) "2"
    ["offername"]=> string(28) "С возвращением!"
    ["status"]=> string(1) "1"
    ["sm_from"]=> string(8) "30000.00"
    ["sm_to"]=> string(9) "100000.00"
    ["prc_from"]=> string(7) "16.0000"
    ["prc_to"]=> string(7) "18.0000"
    ["term_from"]=> string(1) "6"
    ["term_to"]=> string(2) "24"
    ["conditions"]=> array(1) {
      [0]=> object(stdClass)#140 (2) {
        ["co_id"]=> string(1) "1"
        ["condition"]=> string(67) "– только для потенциальных клиентов"
      }
    }
  }
  [2]=> object(stdClass)#114 (10) {
    ["id"]=> string(1) "3"
    ["offername"]=> string(47) "Долгосрочное партнерство"
    ["status"]=> string(1) "3"
    ["sm_from"]=> string(9) "100000.00"
    ["sm_to"]=> string(10) "1000000.00"
    ["prc_from"]=> string(7) "16.0000"
    ["prc_to"]=> string(7) "18.0000"
    ["term_from"]=> string(2) "12"
    ["term_to"]=> string(2) "60"
    ["conditions"]=> array(2) {
      [0]=> object(stdClass)#139 (2) {
        ["co_id"]=> string(1) "2"
        ["condition"]=> string(177) "– без залога и поручительства для клиентов, имеющих положительную кредитную историю в нашей мфо"
      }
      [1]=> object(stdClass)#138 (2) {
        ["co_id"]=> string(1) "2"
        ["condition"]=> string(43) "– без справки о доходах"
      }
    }
  }
}
Спойлер
[свернуть]
« Последнее редактирование: 29.06.2014, 23:11:34 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Нашел косяк: в getItems в цикле обработки conditions $items[] ведет отсчет с 0, а id в таблицах начинается с 1, поправил:
Код: php
      foreach ($conditions as $condition) {
        if (isset($items[ $condition->co_id - 1 ]))
          $items[ $condition->co_id - 1 ]->conditions[] = $condition;
      }
но не знаю, насколько это корректно.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Нашел косяк: в getItems в цикле обработки conditions $items[] ведет отсчет с 0, а id в таблицах начинается с 1, поправил:
Код: php
      foreach ($conditions as $condition) {
        if (isset($items[ $condition->co_id - 1 ]))
          $items[ $condition->co_id - 1 ]->conditions[] = $condition;
      }
но не знаю, насколько это корректно.

Это совсем некорректно!
Покажите полностью метод getItem() который вы написали! потому что у вас что то не так! Ибо ключами в возвращенном $items должны быть id-шники записи!
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Хотя если судить по верхнему getItems то вы сделали не то что я писал!
Посмотрите на 13 странице последний пост что я писал получение $items:
$items = $this->getDbo()->setQuery($query, $this->getStart(), $this->getState('list.limit'))->loadObjectList( 'id' );
 
А у вас стоит
 $items = $this->_getList($query, $this->getStart(), $this->getState('list.limit'));

Поменяйте на то что я писал выше
и это:
 foreach ($conditions as $condition) {
        if (isset($items[ $condition->co_id - 1 ]))
          $items[ $condition->co_id - 1 ]->conditions[] = $condition;
      }
верните в исходное состояние!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Да, работает, единственное что, убрал , $this->getStart(), $this->getState('list.limit') - не требуется, больше дюжины записей никогда не будет ))
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Во фронте во всех вьюхах имеется:
Код: php
$documc_js = '
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);
Как убрать в js-файл?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Если вы это убрали то вам и getListQuery не нужен! И уйти от модели JModelList перейти в JModelLegacy
Все перевести в один метод getItems
Ибо вы получите лишние запросы!
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Во фронте во всех вьюхах имеется:
Код: php
$documc_js = '
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);
Как убрать в js-файл?
Нет особо смысла, ибо придется все равно прописывать передачу '.JText::_('COM_MFO_FTP_UPDATE_POPUP', true).' из PHP в JS
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Нет особо смысла, ибо придется все равно прописывать передачу '.JText::_('COM_MFO_FTP_UPDATE_POPUP', true).' из PHP в JS
В js уже имеется функция, в которую передаются данные, не страшно, имхо. Здесь меня смущает именно то, что это jQuery(document).ready(function($), а используется во всех вьюхах.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Ну так не проблема, в хелпере можете подрубить скрипт с этим и инициализировать переменную
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Если вы это убрали то вам и getListQuery не нужен! И уйти от модели JModelList перейти в JModelLegacy
Все перевести в один метод getItems
Ибо вы получите лишние запросы!
Я вернусь к этому вопросу позже, когда получу от аналитиков данные о возможном максимальном объеме списка.

Ну так не проблема, в хелпере можете подрубить скрипт с этим и инициализировать переменную
Хмм, и как? Просто я в js много хуже, нежели в асме )
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Я вернусь к этому вопросу позже, когда получу от аналитиков данные о возможном максимальном объеме списка.
Хмм, и как? Просто я в js много хуже, нежели в асме )
ну выносите это в отдельный JS файл, убираете лишние кавычки..
вместо '.JText::_('COM_MFO_FTP_UPDATE_POPUP', true).' пишете например '+COM_MFO_FTP_UPDATE_POPUP+'
 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);
});';

и JFactory::getDocument()->addScriptDeclaration('var COM_MFO_FTP_UPDATE_POPUP = "'.JText::_('COM_MFO_FTP_UPDATE_POPUP', true).'";')

Но если у вас будет всего один язык юзаться то вообще тупо сделайте там текст и все!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Да, работает, премного благодарен. Языков планируется минимум 6 (включая рус и анг): конфигурация 1с распространяется в германии и славяноязычной восточной европе, сайт как приложение на тех же языках быть должен.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как при установке связанного с компонентом модуля узнать, а установлен ли в системе компонент?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Как при установке связанного с компонентом модуля узнать, а установлен ли в системе компонент?

Подозреваю что нужно в файле script.php
http://joomlablog.ru/dokumentatsiya/dlya-razrabotchika/sozdanie-komponenta-dlya-joomla-2-5/293-chast-13-skript-ustanovki-obnovleniya-udaleniya-i-server-obnovlenij
В методе preflight сделать запрос в базу! И проверить или установлен компонент! Если не установлен то редиректнуть из установки и сказать что не установлен компонент!
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Кстати, обратил внимание на такое:

Код: php
$view->assignRef('loan', $input->getWord('loan'));
$view->assignRef('list', $input->getWord('list'));

Метод assignRef() уже давно отмченен как устаревший, не советую его использовать. Если устанавливаете представлению какие-то свойства, то определите их в классе представления.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Кстати, обратил внимание на такое:

Код: php
$view->assignRef('loan', $input->getWord('loan'));
$view->assignRef('list', $input->getWord('list'));

Метод assignRef() уже давно отмченен как устаревший, не советую его использовать. Если устанавливаете представлению какие-то свойства, то определите их в классе представления.
Не использую, поскольку при сабмите формы, откуда вызываю другую вьюху, все необходимое уже в реквесте, оттуда в вызываемой вьюхе и тяну все параметры.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Подозреваю что нужно в файле script.php
http://joomlablog.ru/dokumentatsiya/dlya-razrabotchika/sozdanie-komponenta-dlya-joomla-2-5/293-chast-13-skript-ustanovki-obnovleniya-udaleniya-i-server-obnovlenij
В методе preflight сделать запрос в базу! И проверить или установлен компонент! Если не установлен то редиректнуть из установки и сказать что не установлен компонент!
Пока решил собрать все в один пакет, но позже все равно вернусь к данному вопросу в отдельном топике. Спасибо.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Вопрос по jquery.ui. Вьюха:
Код: php
  JHtml::_('jquery.framework');
  $document = JFactory::getDocument();
  $document->addStyleSheet('/media/com_mfo/css/jquery-ui.min.css');
  $document->addScript('/media/com_mfo/js/jquery-ui.min.js');
...
          <div class="controls">
            <script>
              jQuery(function($) {
                $( "#slider-sm<?php echo $item->id; ?>" ).slider({  // ругается сюда: TypeError: $(...).slider is not a function
                  value:<?php echo (int)$item->sm_from; ?>,
                  min:<?php echo (int)$item->sm_from; ?>,
                  max:<?php echo (int)$item->sm_to; ?>,
                  step:500,
                  slide: function( event, ui ) {$( "#amount-sm<?php echo $item->id; ?>" ).val( ui.value );}
                });
                $( "#amount-sm<?php echo $item->id; ?>" ).val( $( "#slider-sm<?php echo $item->id; ?>" ).slider( "value" ) );
              });
            </script>
            <label for="amount-sm<?php echo $item->id; ?>"></label>
            <input type="text" id="amount-sm<?php echo $item->id; ?>" readonly>
            <div id="slider-sm<?php echo $item->id; ?>"></div>
          </div>
jquery-ui.min.js в head присутствует, но его нет в списке файлов в отладчике.
Как это решается?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
если подключаю с cdn, то все работает, тот же файл локально не желает.

upd
c js вопрос решил, htaccess правил - малость переборщил.
« Последнее редактирование: 02.07.2014, 00:33:53 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Могут ли контроллер и модель работать без представления.
Форма обратной связи находится в модуле, сабмит ссылается на компонент. Как будет правильно?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться