Новости Joomla

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
<?php echo $this->form->getInput('cities'); ?>
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Вот пример того как можно использовать сетеры и геттеры в классе:
Спойлер
[свернуть]
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
<?php echo $this->form->getInput('cities'); ?>
Весь XML файл формы дайте! И покажите как выглядит поле после <?php echo $this->form->getInput('cities'); ?> на странице!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: xml
<?xml version="1.0"?>
<form>
  <fieldset>
    <field name="cities" type="checkboxesdb" label="" src="crmt_city.id.city.published=1" addfieldpath="/administrator/components/com_crmtourism/models/fields"/>
    <field name="countries" type="checkboxesdb" label="" src="crmt_country.id.country.published=1" addfieldpath="/administrator/components/com_crmtourism/models/fields"/>
  </fieldset>
</form>

Во фронте на выходе:
Код: html4strict
<fieldset id="cities" class="checkboxes">
    <ul>
        <li>
            <input id="cities0" type="checkbox" value="1" name="cities[]"></input>
            <label for="cities0">Архангельск</label>
        </li>
        <li>
            <input id="cities1" type="checkbox" value="2" name="cities[]"></input>
            <label for="cities1">Астрахань</label>
        </li>
        тут еще 100500 аналогичных li
    </ul>
</fieldset>
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
А теперь модель формы
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спойлер
[свернуть]
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
1. вы уверенны что  $this->item->cities = json_decode($this->item->cities, true); установилось то что надо? Пробовали в шаблоне посмотреть что в $this->item в результате?
2. Проверяли что приходит в значения поля? в
Код: php
protected function getInput()
  {
    print_r($this->value);
    return parent::getInput();
  }
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
getItem косячный...

if (!isset($this->item[$id])) - отрабатывает код. А если $this->item[$id] установлен, то у вас возвращается false. Как это? else return false; - убрать!

так должно быть:

Код: php
if (!isset($this->item[$id])) 
{
   получаем item
   $this->item[$id] = item;
}

return $this->item[$id];

Или если у Вас $this->item не массив, то:

Код: php
if (!isset($this->item)) 
{
   получаем item
   $this->item = item;
}

return $this->item;
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
1. уверен, о чем писал выше:
после $this->item->cities = json_decode($this->item->cities, true); пишу: print_r($this->item->cities);
на выходе: Array (
  • => 3 [1] => 4 [2] => 23 [3] => 37 )

2. в админке приходит: Array (
  • => 3 [1] => 4 [2] => 23 [3] => 37 )

во фронте ничего не приходит
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Пока мыслей нету.. все должно пахать..
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
  public function getItem($id null) {
    if (!isset(
$this->item)) {

      
$user JFactory::getUser();
      
$query $this->_db->getQuery(true);
      
$query->select('id, joomid, cities, countries, rq_sm, rq_count, contactface, phones, skype, icq, adr')
        ->
from('`#__crmt_firms`')
        ->
where('`joomid` = '.(int)$user->id);
      
$this->_db->setQuery($query);
      
$this->item $this->_db->loadObject(); // !
      
$this->item->name $user->name;
      
$this->item->email $user->email;
      
$this->item->cities json_decode($this->item->citiestrue);
      
print_r($this->item->cities); // Array ( [0]=> 3 [1] => 4 [2] => 23 [3] => 37 )
      
$this->item->countries json_decode($this->item->countriestrue);
      
$this->item->citycount count($this->item->cities);
      
$this->item->countrycount count($this->item->countries);

      
$query $this->_db->getQuery(true);
      
$query->select('r.id, r.created, r.city, r.country, r.dt_departure_f, r.dt_departure_t, r.rest_days, r.adultscount, r.childscount, r.stars, r.fio, r.phone, r.email, r.descript, c.city as cityname, g.country as countryname')
        ->
join('LEFT''#__crmt_city AS c ON c.id = r.city')
        ->
join('LEFT''#__crmt_country AS g ON g.id = r.country')
        ->
from('`#__crmt_requests` as r')
        ->
where('r.city in ('.implode(', '$this->item->cities).')')
        ->
where('r.country in ('.implode(', '$this->item->countries).')')
        ->
order('r.created desc');
      
$this->_db->setQuery($query);
      
$this->item->rqlist $this->_db->loadObjectList();
      
$rc = (int)$this->item->rq_count;
      if (
$rc count($this->item->rqlist))
        
$this->item->rqlist array_slice($this->item->rqlist, -$rc);

    }
    return 
$this->item;
  }


В итоге - тот же результат, флажки не ставятся
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
А точно флажки с с такими ID как в $this->item->cities есть в выводе?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
100500
те же самые данные в точно таком же поле в админке отображаются нормально...
« Последнее редактирование: 13.01.2015, 13:23:08 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Ну у меня пока один вариант, продебажить содержимое getInput() (то есть перенести из родителя код get input) и посмотреть почему не ставятся данные!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Перенес код getInput, перед перебором оптионс:
var_dump($this->value); => string(0) ""
var_dump(isset($this->value)); => bool(true)
var_dump(empty($this->value)); => bool(true)

var_dump($this->name); => string(8 ) "cities[]" - может, из-за скобок квадратных?
« Последнее редактирование: 13.01.2015, 13:42:01 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Ок. Хрен с ним, получу результаты конкретного запроса в модели и сформирую вывод поля во вьюхе вручную, попутно также ручками проставив галочки.

Как мне из поля получить данные (во фронте)?
вся форма во фронте:
Код: php
      <form action="/" method="post" id="citieslistform">
        <div class="uk-panel-title"><?php echo JText::_('COM_CRMT_POPUP_TITLE_CITY'); ?></div>
        <div class="desc muted"><?php echo JText::_('COM_CRMT_POPUP_DESC_CITY'); ?></div>
        <div class="controls">
          <?php echo $this->form->getInput('cities'); /* потом переделаю */ ?>
          <input type="hidden" name="id" value="<?php echo $this->item->id; ?>" />
          <input type="hidden" name="option" value="com_crmtourism" />
          <input type="hidden" name="task" value="pcto.savecities" />
          <?php echo JHtml::_('form.token'); ?>
        </div>
        <div class="uk-panel-footer">
          <a id="citieslistbtnsave" class="uk-button uk-button-primary"><?php echo JText::_('JSAVE')?></a>
          <a id="citieslistbtnclose" class="uk-button"><?php echo JText::_('JCANCEL')?></a>
        </div>
      </form>

на jq по клику на #citieslistbtnsave происходит #citieslistform.submit();

*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
ну у вас же таск pcto.savecities там и думайте как получить данные и направить их в модель ) Посмотрите ка к это делается в методе save
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
$cities = $input->getArray('cities'); => Catchable fatal error: Argument 1 passed to JInput::getArray() must be of the type array, string given, called in \controllers\pcto.php on line 13 and defined in \libraries\joomla\input\input.php on line 190
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
$cities = $input->getArray('cities'); => Catchable fatal error: Argument 1 passed to JInput::getArray() must be of the type array, string given, called in \controllers\pcto.php on line 13 and defined in \libraries\joomla\input\input.php on line 190
getArray делает не то что вы думаете )))))

Пример:
Код: php
$input = JFactory::getApplication()->input;
$data = array( 'option' => '', 'view' => '' );
print_r( $input->getArray( $data ) );//выведет Array ( [option] => com_content [view] => article)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
блин, и как?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
блин, и как?
$input = JFactory::getApplication()->input;
$cities = $input->get( 'cities', array(), 'array' );
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
получил, спс

я тут подумал, а может галочки не ставятся потому что в getOptions() стоит $option->checked = false; или это не влияет? убрать - в getInput ругается на несуществующий checked
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Естественно по тому и не ставится! Вот только почему там false?
*

AlekVolsk

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

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Попробуйте так (это у вас в getOptions):
foreach ($items as $i => $item) {
          $option = JHtml::_('select.option', (string)$item->key, (string)$item->value, 'value', 'text', $this->disabled);
          $option->checked = true;
          $option->onclick = $this->onclick;
          $option->onchange = $this->onchange;
          $options[] = $option;
}
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Теперь галочки стоят все и везде! Даже в админке.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
ну а теперь дело за малым!
$option->checked = in_array($item->value, (array)$this->value);
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
в админке норм, во фронте глухо, по прежнему
что-то все-таки упускаем, имхо, в модели, ибо еще на входе в getInput $this->value пуст
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
а перед foreach ($items as $i => $item) {
сделайте var_dump($item->value)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
перед foreach $item еще не существует, а var_dump($this->value) возвращает string(0) ""
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Опциональное поле в форме

Автор borro

Ответов: 21
Просмотров: 2302
Последний ответ 28.12.2020, 12:16:13
от platonische
Как написать сложное кастомное поле?

Автор Gover

Ответов: 1
Просмотров: 859
Последний ответ 11.07.2018, 00:14:34
от fsv
Если нужно добавить поле в subform repeatable своим ява скриптом - как сделать?

Автор Progreccor

Ответов: 7
Просмотров: 1254
Последний ответ 03.04.2018, 16:03:54
от Progreccor
Поле для прикрепления файлов в администраторе

Автор Joker_V

Ответов: 1
Просмотров: 1337
Последний ответ 09.04.2016, 21:17:02
от Joker_V
Добавляю поле Featured в компоненте

Автор platonische

Ответов: 6
Просмотров: 1393
Последний ответ 21.10.2015, 18:06:48
от Aleks.Denezh