Новости Joomla

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

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Добрый день.
Я сделала компонент телефонный справочник на основе примера создания компонента для Joomla 2.5
Код
http://joomlablog.ru/dokumentatsiya/dlya-razrabotchika/sozdanie-komponenta-dlya-joomla-2-5/433-chast-16-dobavlyaem-filtry-i-uchimsya-sozdavat-svoi
В примере есть поля, которые задаются select'ом (состояние и категория)
файл
Код
administrator/components/com_record/models/forms/record.xml
Состояние задано списком опций
Код
field
name="state"
type="list"
label="JSTATUS"
description="JFIELD_PUBLISHED_DESC"
class="inputbox"
size="1"
default="1"
>
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>
<option value="2">JARCHIVED</option>
<option value="-2">JTRASHED</option>
</field>
а категория - расширением
Код
<field
name="catid"
type="category"
extension="com_record"
class="inputbox"
default=""
label="COM_RECORD_RECORD_FIELD_CATID_LABEL"
description="COM_RECORD_RECORD_FIELD_CATID_DESC"
required="true"
>
<option value="0">JOPTION_SELECT_CATEGORY</option>
</field>
А как создать select, который заполняется значениями из произвольной таблицы бд, которая не связана (как категория) с таблицей, по которой ведётся запрос?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Создайте собственный тип поля, за основу возьмите тип list и делайте там из любой таблицы выборки.
интернет-блог: http://websiteprog.ru
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Создайте собственный тип поля, за основу возьмите тип list и делайте там из любой таблицы выборки.
Спасибо за ответ.
А там это где?
Код
<field
name="nstr"
type="listfromtable"
label="COM_RECORD_RECORD_FIELD_NSTR_LABEL"
description="COM_RECORD_RECORD_FIELD_NSTR_DESC"
class="inputbox"
size="1"
default="0"
>
<?php
$db =& JFactory::getDBO();
$query = $db->getQuery(true);


$query->select('h.nstr as value, h.name_short as text');

$query->from('#__labs AS h');
$db->setQuery($query);
$messages = $db->loadObjectList();

foreach ($messages as $message)
{

echo '<option value="'.$message->nstr.'">'.$message->name_short.'</option>';
}



?>
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Ну уж не в XML файле точно). Сначало создаете папку fields и файл например тут: \models\fields\mylist.php cо следущим содержимым:
Спойлер
[свернуть]

Затем в XML файле пропишите путь к папке:  <fields addfieldpath="/components/mycomponent/models/fields">
Ну и собственно само поле добавьте:
Код: xml
<field
 name="mylistname"
 type="mylist"
 description="..._MYLIST_DESC"
 label="...MYLIST_LABEL"
/>

Ну и конечно запросы лучше в модель перенести, и пользоватся моделью уже в файле.       
интернет-блог: http://websiteprog.ru
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
В примере, на который я ссылалась, в файле models/forms/record.xml для поля state указан тип list
Код
<field
name="state"
type="list"
, а затем просто выведены опции, а для поля catid - тип category
Код
<field
name="catid"
type="category"
extension="com_record"
class="inputbox"
В файле modes/fields/record.php - // Подключаем тип поля list.
Спойлер
[свернуть]
1.Я не могу понять, если у поля catid тип category, то причём здесь Подключаем тип поля list.
2. Если  уже есть файл modes/fields/record.php , в котором подключен тип "list", можно в это же файл добавить подключение типа "mylist"?
3.Ну и конечно запросы лучше в модель перенести, и пользоватся моделью уже в файле.  - Это, сказать честно, я не поняла.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Чето я вас тоже не понял) Я вам показал лишь как можно создать собственный тип поля на основе стандартных. У вас есть XML форма в которую вы можете добавлять стандартные или свои собственные поля. В своем типе можете писать что хотите. Тот HTML что вы отдаете в методах будет выводится в форме. Не обязательно опции можете что угодно прописать там можете там объеденять поля и выборки любые делать. И конечно вы можете наследовать от собственного класса(типа поля) и от других, если вы это имеете ввиду. Какие проблемы то?

По поводу модели,  вы ведь не пишете весь код в одном файле? Если бы все писали так, то такой код не смог бы прочитать и понять толком даже сам разработчик. Что бы отделить мух от котлет, для многих фреймворков придумана структура медель-вид-контроллер. Контроллер обрабатывает запросы, модель работает с данными, вид отображает данные. В самом упрощенном варианте. Так что все запросы в БД лучше делать там, хотя это и не так принципиально. Но вы же компонент разрабатываете..
интернет-блог: http://websiteprog.ru
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
По поводу модели,  вы ведь не пишете весь код в одном файле? Нет, конечно, я не пишу.
И всё равно запуталась.
мой компонент com-record.
файл administrator/components/com-record/models/record.php
Спойлер
[свернуть]
файл administrator/components/com-record/models/forms/record.xml
Спойлер
[свернуть]
файл administrator/components/com-record/models/fields/record.php

Спойлер
[свернуть]

Можно? (нужно?) добавить расширение для поля nstr в файл   administrator/components/com-record/models/fields/record.php   или его надо отдельным файлом поместить в каталог forms
Спойлер
[свернуть]
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Если это отдельное поле то зачем его в один файл то? У вас есть тип record и mylist, которые выводят селекты со списками опций, для каждого типа поля свой список, своя выборка.  Нет вы конечно можете и все в одно поле запихнуть оба селекта, для этого надо перегрузить метод getinput() в том же файле. Там вы вобще можете хоть 10500 полей определять, любой HTML выводить.. но я просто не вижу смысла в этом. Если поля между собой не связаны то для каждого поля лучше отдельный файл создать.
интернет-блог: http://websiteprog.ru
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Создала два отдельных файла в директории models/forms: record.php и mylist.php

mylist.php:
Спойлер
[свернуть]

Выходит ошибка Fatal error: Call to a member function getFieldsets() on a non-object in Z:\home\localhost\www\joomla\administrator\components\com_record\views\record\tmpl\edit.php on line 12
Спойлер
[свернуть]
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Создала два отдельных файла в директории models/forms: record.php и mylist.php
Не там создаете, это у вас не формы а поля. Вам нужно создать папку fields и туда их положить, а в XML файле формы прописать путь к папке с вашими полями
Выходит ошибка Fatal error: Call to a member function getFieldsets() on a non-object in
Эта ошибка говорит о том что вы вызываете метод getFieldsets() на не-объекте. Тоесть $this->form не объект. Так что смотрите почему у вас getForm не возвращает объект формы если вы его вобще вызываете..
интернет-блог: http://websiteprog.ru
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Извините, ошиблась. Файлы record.php b mylist у меня лежат в папке fields.
Но когда поле nstr задано
Код
<field
name="nstr"
type="text"
label="COM_RECORD_RECORD_FIELD_NSTR_LABEL"
description="COM_RECORD_RECORD_FIELD_NSTR_DESC"

size="2"
required="true"
default=""


/>
всё работает. Может, конечно, работает потому что связанных категорий у меня нет. Так, из примера осталось.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
файл views/record/view.html.php

Спойлер
[свернуть]
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Форма для добавления данных в Google Sheets

Автор zigzagrus

Ответов: 2
Просмотров: 1496
Последний ответ 07.11.2024, 12:03:12
от zigzagrus
Непонятные символы в конце каждой статьи после сохранении редактирования

Автор Анастасия Гвоздева

Ответов: 2
Просмотров: 1630
Последний ответ 19.03.2019, 15:01:41
от draff
Как создать редирект в форме заказа на основе выбора пользователя? 3.8.10?

Автор CyberWizard

Ответов: 3
Просмотров: 1247
Последний ответ 31.07.2018, 12:11:13
от varX
500 ошибка после редактирования файла

Автор RedDeni

Ответов: 3
Просмотров: 1656
Последний ответ 19.07.2018, 12:10:01
от Somapinwan
Как удалить ненужные поля при регистрации?

Автор petya242

Ответов: 2
Просмотров: 4020
Последний ответ 09.11.2017, 12:58:09
от abonnent