Новости Joomla

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!Файловый менеджер Quantum — одно...

Файловый менеджер Quantum — одно из самых популярных решений для Joomla, созданное разработчиком из сообщества Joomla, Дмитрием Цымбалом (@tsymbalmitia). Он делает Quantum удобным, безопасным и современным, обновляет его, исправляет уязвимости и отвечает пользователям — всё это в свободное от основной работы время.

Теперь настал момент для следующего шага: развитие проекта требует больше времени и ресурсов.

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

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Есть компонент типа HelloWorld
и
В нем есть форма в XML вида с combobox
Код
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
      <field name="id" type="hidden"/>
      <field
         name="color"
         type="combo"
         label="color"
         description="color"
         size="1"
         default=""
      >
      <option value="0">- выбирите цвет -</option>
      </field>
</fieldset>
</form>

Форма как и положено в виде у меня
Код
   public function display($tpl = null)
   {
    ....
       $form = $this->get('Form');
    .....
      $this->form = $form;
    .....

В tmpl в файле edit.php
Код
<form action="index.php"
      method="post" name="adminForm" id="adminForm">
        <fieldset class="adminform">
                <legend><?php echo JText::_( 'COM_MY_DETAILS' ); ?></legend>
                <?php foreach($this->form->getFieldset() as $field): ?>
                        <?php if (!$field->hidden): ?>
                                <?php echo $field->label; ?>
                        <?php endif; ?>
                        <?php echo $field->input; ?>
                <?php endforeach; ?>
        </fieldset>
        <div>
      ......


Вопрос.
1. Как динамически заполнить combobox из формы в каком либо php файле?
Т.е. нужно к примеру добавить в combobox:
<option value="1">Белый</option>
<option value="2">Черный</option>

2. В каком файле это лучше сделать? Подозреваю что в edit.php

3. После выбора элемента в combobox, как вернуть его value и значение?

P.S.: Вероятно что при использовании формы в XML виде эту задачу решить нельзя. Или можно ?
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
Делайте тогда свой класс по аналогии с JFormFieldCombo, расширяющий JFormFieldList  и переопределяйте метод getOptions()

Соответственно в XML задаёте свой type, options не задаёте, так как вы их собираетесь получать по-своему.
Не забудьте в XML про addFieldPath
*

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Спасибо.

Думал проще можно сделать, но снова увы  :o.
Попробую. Если не получится, то придется генерить через JHTML::_('select.genericlist'....
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
Куда уж проще. Половину скопируете с JFormFieldCombo, вторую половину напишете
*

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Решено  :D

Значит делаем так:
В XML файле в поле type прописываем свой тип который мы сейчас сделаем:
Код
<form
addrulepath="/administrator/components/com_my/models/rules"
>
....
<field
         name="color"
         type="Color"
         label="Color"
         description="Color"
         size="1"
         default=""
      >

Теперь нужно прописать свой тип.
В models/fields создаем файл color.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die;
 
// import the list field type
jimport('joomla.form.helper');
jimport('joomla.form.formfield');
JFormHelper::loadFieldClass('list');

class JFormFieldColor extends JFormFieldList
{
   protected $type = 'color';
 
   public function getInput() {
                return '<select id="'.$this->id.'" name="'.$this->name.'">'.
                       '<option value="1" >Белый</option>'.
                       '<option value="2" >Черный</option>'.
                       '</select>';
        }
}

Далее в public function getInput() можем уже прописывать все что угодно что будет нам к примеру брать цвета из переменных или массива.

Если же нужно чтобы combobox заполнялся значениями из базы, как это собственно и нужно было мне, то вместо public function getInput()
пишем другую функцию:
Например для выборки данных в combobox из базы #__color с полями color_id и color
Код
	protected function getOptions() 
{
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('color_id,color');
$query->from('#__color');
$db->setQuery((string)$query);
$messages = $db->loadObjectList();
$options = array();
if ($messages)
{
foreach($messages as $message)
{
$options[] = JHtml::_('select.option', $message->color_id, $message->color);
}
}
$options = array_merge(parent::getOptions(), $options);
return $options;
}
« Последнее редактирование: 21.11.2012, 21:16:43 от rsa_m »
*

rsa_m

  • Захожу иногда
  • 254
  • 22 / 0
Кстати на заметку.

В виде после загрузки формы из XML файла, любой атрибут поля формы можно получить так:
Код
$param = $this->form->getFieldAttribute('название_поля','название_атрибута');
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Расширение BA Team - Не удалось найти представление [name, type, prefix]: images

Автор DeniTornado

Ответов: 0
Просмотров: 1483
Последний ответ 19.09.2024, 14:50:24
от DeniTornado
Динамическое создание полей в настройках модуля

Автор Makkssimka

Ответов: 7
Просмотров: 2553
Последний ответ 13.03.2015, 22:15:39
от fbr
Поменять версию jquery из <jdoc:include type="head" />

Автор kreker92

Ответов: 1
Просмотров: 3286
Последний ответ 05.09.2013, 20:57:53
от kreker92