Новости Joomla

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

Sl@vk@

  • Захожу иногда
  • 147
  • 2 / 0
Добрый день! У меня возникла следующая проблема.

Я пишу компонент туров. Его дефолтная страница (в админке) выглядит так:


Все данные хранятся в одной таблице, а наименования категорий - в другой. Связываются они по средствам ключа id_cat. На этой странице я смог по айдишнику обратиться ко второй таблице и вместо цифры поставить связанную с этим номеров наименование категории. В модели я прописал всего лишь 2 строчки к выборке данных
Код
$query->select('b.id_cat AS id_cat, b.name_cat AS name_cat');
$query->join('LEFT', '`#__tourism_category` AS b ON b.id_cat = a.id_cat');
При клике на тур открывается редактирование тура. Как подставить данные и как их отобразить хранится в xml-файле
Код
<?xml version="1.0" encoding="utf-8"?>
<form addrulepath="/administrator/components/com_tourism/models/rules">
 
<fieldset>
 <field
 name="id_tours"
 type="hidden"
 />
 
 <field
 name="name_tours"
 type="text"
 label="COM_TOURISM_RAZDEL"
 size="40"
 default=""
 />
 
  <field
 name="alias_tours"
 type="text"
 label="COM_TOURISM_ALIAS"
 size="40"
 default=""
 />
 
 <field
 name="published"
 type="list"
 label="JSTATUS"
 class="inputbox"
 size="1"
 default="1">
 <option value="1">JPUBLISHED</option>
 <option value="0">JUNPUBLISHED</option>
 </field>
 
 <field
 name="description_tours"
 type="editor"
 label="COM_TOURISM_DESCRIPTION_TOURS"
 buttons="true" />
 
 <field
 name="id_cat"
 type="category"
 extension="com_tourism_category"
label="COM_TOURISM_CATEGORY_TOURS"
description="COM_TOURISM_CATEGORY_TOURS1"
class="inputbox"
required="true">
</field>

 
 </fieldset>
</form>

Как мне сделать так, что при редактировании список категорий появлялся в виде выпадающей ленты? Я ж в XML обратиться к другой таблице не могу... Где надо что добавить, что список этот сформировался автоматически?
*

Sl@vk@

  • Захожу иногда
  • 147
  • 2 / 0
Да мне все гораздо проще надо... Вот смотрите до чего я додумался. В .xml файле вы уже работаем с обработанными данными. А кто мне скажет где эти данные выбираются из БД. Я полагал в models/fields/mycomponent.php...  Но полностью убрав функцию  protected function getOptions() я с ужасом обнаружил, что ничего не поломалось... Зато если убрать в tables/mycomponent.php код
Код
function __construct(&$db) 
 {
 parent::__construct('#__tourism_tours', 'id_tours', $db);

 }

то все перестает работать.... Это как раз логично... Но где жемне добавить join к выборке из БД, чтоб прикрепить к выборке данные из второй таблички. Напоминю, что я работаю же с редактированием конкретного объекта....
*

Postf

  • Новичок
  • 2
  • 2 / 0
Добрый день!

В модели я прописал всего лишь 2 строчки к выборке данных
Код
$query->select('b.id_cat AS id_cat, b.name_cat AS name_cat');
$query->join('LEFT', '`#__tourism_category` AS b ON b.id_cat = a.id_cat');

Хотел посмотреть полний листинг файла.

п.с. посоветуйте что почитать про разработку компонентов для работы с базами данных
*

Sl@vk@

  • Захожу иногда
  • 147
  • 2 / 0
Добрый день!

Хотел посмотреть полний листинг файла.

п.с. посоветуйте что почитать про разработку компонентов для работы с базами данных
Вот полный листинг файла, который вы хотите посмотреть. Про работу БД с Joomla 1.7 лучше мануала я ничего не видел. Набери в Яндексе "Joomla API" - и первая или вторая ссылка пойдет на мануал - там выберите работу с БД и читайте, как что работает. Будут вопросы - пишите в личку - чем смогу помогу.
Код
<?php
// Модель отображение всех туров. Модель отвечает за работу с БД

// Запрет к прямому доступу.
defined('_JEXEC') or die('Restricted access');

// Импорт Joomla библиотеки modellist
jimport('joomla.application.component.modellist');

// Класс модели
class TourismModelTourisms extends JModelList
{

// Конструктор. Данная функция формирует данные для сортировки
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array
(
'id_tours', 'a.id_tours',
'name_tours', 'a.name_tours',
'ordering', 'a.ordering',
'published', 'a.published',
'id_cat', 'a.id_cat'
);
}
parent::__construct($config);
}

//Метод для автоматического заполнения model state
protected function populateState($ordering = null, $direction = null)
{
// Initialise variables.
$app = JFactory::getApplication('administrator');

// List state information.
parent::populateState('a.name_tours', 'asc');
}

//Метод загрузки и возвращения данных из БД
protected function getListQuery()
{
// Создаём новый объект запроса к БД
$db = $this->getDbo();
$query = $db->getQuery(true);

// Выбираем нужные поля из таблицы (выбираем все поля)
$query->select
(
$this->getState
(
'list.select',
'*'
)
);

// Выбираем таблицу, содержащую поля и префикс данных для работы с полученными данными в будущем
$query->from('`#__tourism_tours` AS a');

$query->select('b.id_cat AS id_cat, b.name_cat AS name_cat');
$query->join('LEFT', '`#__tourism_category` AS b ON b.id_cat = a.id_cat');

$orderCol = $this->state->get('list.ordering');
$orderDirn = $this->state->get('list.direction');
if ($orderCol == 'ordering' || $orderCol == 'category_title')
{
$orderCol = 'category_title '.$orderDirn.', ordering';
}
$query->order($db->getEscaped($orderCol.' '.$orderDirn));
return $query;
}
}
*

Sl@vk@

  • Захожу иногда
  • 147
  • 2 / 0
frisian, сейчас попробую сделать как вы сказали... Хотя мне кажется, что вариант с join был бы лучше. Но если в данном случае у Joomla так не принято - то буду довольствоваться тем, что есть.
*

Sl@vk@

  • Захожу иногда
  • 147
  • 2 / 0
Простите, но в чем извращение? Извращение в том, что я хочу сократить код? В том, что я хочу сделать выборку из таблицы  и рядом с ней "приклеить" еще одну выборку и работать с получившимся результатом как с единым целым, а не писать кучу лишних условий?

Мне надо сделать, что категории работали по принципу "Менеджера материалов". Я зашел в менеджер категорий, создал 5-6 категорий, а потом при добавлении нового объекта мне предлагался выпадающий список с этими самыми категориями.... Я попылся посмотреть, как это реализовано в com_content, но честно так и не смог разобраться... Но там между прочим эти самые join используются только так.
*

Sl@vk@

  • Захожу иногда
  • 147
  • 2 / 0
« Последнее редактирование: 08.03.2012, 23:57:52 от Sl@vk@ »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

MVC, работа с видами

Автор borodatych

Ответов: 23
Просмотров: 1764
Последний ответ 06.04.2015, 14:53:12
от b2z
Создание категорий для записей в компоненте

Автор popoff17

Ответов: 3
Просмотров: 1226
Последний ответ 03.04.2014, 21:13:18
от popoff17
Работа с датой, дата в родительском падеже

Автор Xiss

Ответов: 4
Просмотров: 2189
Последний ответ 27.02.2014, 19:13:43
от Xiss
[Решено] Работа со сторонним модулем из своего компонента

Автор st.al

Ответов: 5
Просмотров: 1261
Последний ответ 20.06.2013, 17:35:04
от st.al
Работа с несколькими таблицами базы данных на одной странице редактирования материала Joomla

Автор Extalionez

Ответов: 6
Просмотров: 5289
Последний ответ 02.12.2012, 16:14:53
от rsa_m