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

Glorius

  • Новичок
  • 4
  • 0 / 0
Уважаемые формучане, здравствуйте!

Создал поле путем расширения стандартного класса JFormFieldList.
При добавлении поля в XML файл формы, поле отображается без проблем.
В документации по созданию пользовательских полей указано, что если поле не подключено в XML файле формы, то можно использовать следующую конструкцию:
Код
JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields');
$proba = JFormHelper::loadFieldType('Proba', false);
$probaOptions = $proba->getOptions();
При попытке вывести поле таким образом вываливается ошибка:

0 Call to a member function xpath() on null

Вываливается на этом месте:
Код
$probaOptions = $proba->getOptions();
Подскажите пожалуйста, что это может значить и в какую сторону рыть?
*

sivers

  • Завсегдатай
  • 1777
  • 243 / 0
Подскажите пожалуйста, что это может значить и в какую сторону рыть?
закоментируйте 3-ю строку и добавьте:
Код
print_r($proba);
exit;
это чтоб убедиться, что у вас там объект не пустой (что очень вероятно).

Если добавляете пользовательское поле (свой тип поля), то у него должна быть реализация (пхп-код). Либо у вас нет реализации, либо там ошибка.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Glorius

  • Новичок
  • 4
  • 0 / 0
Сделал:
Спойлер
[свернуть]
Реализация из документации, ничего не менял практически:
Код
<?php
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');

JFormHelper::loadFieldClass('list');

class JFormFieldProba extends JFormFieldList {

   protected $type = 'Proba';

   public function getOptions() {
       $app = JFactory::getApplication();
       $catid = $app->input->get('catid');
       if ($catid) {
              $db = JFactory::getDbo();
              $query = $db->getQuery(true);
              $query->select('a.title')->from('`#__answer_tt` AS a')->where('a.catid = "'.$catid.'" ');
              $rows = $db->setQuery($query)->loadObjectlist();
              foreach($rows as $row){
                     $oforma[] = $row->title;
              }
              $options = array_merge(parent::getOptions(), $oforma);
       }
       else {
              $options = parent::getOptions();
       }
       return $options;
       }
}
При добавлении поля в XML формы все прекрасно работает
Код
<field 
      name="proba_cat"
      type="Proba"
      label="COM_ANSWER_FORM_LBL_T_PROBA_CAT"
      description="COM_ANSWER_FORM_DESC_T_PROBA_CAT"
      hint="COM_ANSWER_FORM_LBL_T_PROBA_CAT">
            <option value="">---</option>
</field>
*

sivers

  • Завсегдатай
  • 1777
  • 243 / 0
Для начала попробуйте заменить это:
Код
$proba = JFormHelper::loadFieldType('Proba', false);
на это:
Код
$proba = JFormHelper::loadFieldType('Proba', true);

Но не думаю, что что-то существенно изменится. Опции вроде как относятся к конкретному полю и описываются в XML. А вы получаете объект типа поля (т.е. шаблон, а не само поле) и пытаетесь вытянуть из него опции, которых там просто нет.
В родительсом классе getOptions() (который вызывается в случае отсутствия $catid в параметрах) идет обращение к объекту:
Код
$this->element->xpath('option')
отсюда и ошибка.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

sivers

  • Завсегдатай
  • 1777
  • 243 / 0
Попробуйте вот такой код:
Код
$form = JForm::getInstance('', JPATH_ROOT.'/путь_к_вашей_форме/имя_формы.xml');
$fieldProbaCat = $form->getField('proba_cat');
$probaOptions = $fieldProbaCat->getOptions();
print_r($probaOptions);
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Glorius

  • Новичок
  • 4
  • 0 / 0
Для начала попробуйте заменить это:
Код
$proba = JFormHelper::loadFieldType('Proba', false);
на это:
Код
$proba = JFormHelper::loadFieldType('Proba', true);
Вы правы, это ничего не меняет.

И в этом вы правы:
... пытаетесь вытянуть из него опции, которых там просто нет.
*

Glorius

  • Новичок
  • 4
  • 0 / 0
Попробуйте вот такой код:
Код
$form = JForm::getInstance('', JPATH_ROOT.'/путь_к_вашей_форме/имя_формы.xml');
$fieldProbaCat = $form->getField('proba_cat');
$probaOptions = $fieldProbaCat->getOptions();
print_r($probaOptions);
Спасибо за подсказку. )
Данный способ работает только в виде, в контроллере выдает ошибку.

Спасибо за наводку в Вашем предыдущем сообщении.
Создал пользовательское поле (не расширение) и все "взлетело" )
Соответственно, используя $proba->getInput(); вместо $proba->getOptions();
*

sivers

  • Завсегдатай
  • 1777
  • 243 / 0
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Странная ошибка

Автор borro

Ответов: 6
Просмотров: 1951
Последний ответ 31.07.2020, 17:19:58
от NewUsers
Динамические поля как параметры пункта меню

Автор platonische

Ответов: 10
Просмотров: 498
Последний ответ 05.01.2020, 15:45:46
от platonische
Атрибут поля Showon

Автор rkron

Ответов: 4
Просмотров: 1051
Последний ответ 29.01.2019, 20:28:13
от dmitry_stas
Ошибка: 1064 - You have an error in your SQL syntax;

Автор ds30358

Ответов: 4
Просмотров: 517
Последний ответ 02.12.2017, 19:39:30
от Aleks.Denezh
[РЕШЕНО] Ошибка повторной установки

Автор platonische

Ответов: 17
Просмотров: 939
Последний ответ 28.11.2017, 13:26:44
от platonische