Форум русской поддержки Joomla!® CMS
08.12.2016, 13:59:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Переопределяю метод load для таблицы

 (Прочитано 184 раз)
0 Пользователей и 1 Гость смотрят эту тему.
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« : 17.03.2016, 19:21:20 »

Хочется получить для обработки данные из других таблиц.
Получить хочу во время редактирования формы (пока после сохранения)
Стал смотреть где можно это все сделать и нашел функцию load начал ее переопределять...
Скопировал родителя и меняю запрос к базе - добавляю JOIN LEFT поля из других таблиц. Запрос проверил в MySQL он отрабатывает правильно, а вот получить значения в выводе не получается. получаю так var_export($this->item, true).

Такое чувство что кто-то отрезает потом эти данные.
Подскажите в каком месте они срезаются?
И если я нагородил, то как решить данный вопрос.

В целом нужно получить пару полей из связанных таблиц чтоб сделать расчет и положить.
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #1 : 17.03.2016, 19:32:11 »

нашел функцию load
Какого класса? JTable, что ли? Почему не приводить код или хотя бы давать информацию не в усеченном виде?
Записан
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #2 : 17.03.2016, 19:38:28 »

Извиняюсь
Код:
...
class TableTurism_Order extends JTable
...
public function load($keys = null, $reset = true) // Копия с той функции что в JTABLE
{
...
// Initialise the query.
$query = $this->_db->getQuery(true);
$query->select( 'o.*' );
$query->select( 't.title as tt' );
$query->select( 'c.title as ct' );
$query->join( 'LEFT', '#__turism_customer as c ON c.id=o.customer_id' );
$query->join( 'LEFT', '#__turism_tour as t ON t.id=o.tour_id' );
$query->from($this->_tbl. ' as o');

$fields = array_keys($this->getProperties());

foreach ($keys as $field => $value)
{
// Check that $field is in the table.
if (!in_array($field, $fields))
{
throw new UnexpectedValueException(sprintf('Missing field in database: %s   %s.', get_class($this), $field));
}
// Add the search tuple to the query.
$query->where('o.'.$this->_db->quoteName($field). ' = ' . $this->_db->quote($value));
}

$this->_db->setQuery($query);

$row = $this->_db->loadAssoc();

// Check that we have a result.
if (empty($row))
{
$result = false;
}
else
{
// Bind the object with the row and return.
$result = $this->bind($row);
}

// Implement JObservableInterface: Post-processing by observers
$this->_observers->update('onAfterLoad', array(&$result, $row));

return $result;
}
Изменил только то что касается запроса
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #3 : 17.03.2016, 19:41:19 »

Вы же вроде умеете код читать.
Код:
// Bind the object with the row and return.
$result = $this->bind($row);
Записан
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #4 : 17.03.2016, 19:50:45 »

Вы же вроде умеете код читать.
Да еще видать не все. Че ему не нравится?
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #5 : 17.03.2016, 20:02:05 »

Прочитайте ее. Но должен сказать, что вы идете не тем путем. Переопределите методы в модели, а не в JTable.
« Последнее редактирование: 17.03.2016, 20:05:36 от robert » Записан
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #6 : 17.03.2016, 21:02:32 »

Переопределите методы в модели, а не в JTable.
Спасибо! Вот что вышло:
написал в модели функцию и вызываю её из переопределенной фукнции getItem
Показать текстовый блок
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #7 : 17.03.2016, 22:25:36 »

Код
$query->where('o.id=\''.$item->id.'\'');
 

Вы думаете таким образом обезопасили запрос? Забавно, но это как раз потенциальная sql иньекция. В данном контексте может и ничего но если вы так же и пользовательские данные фильтруете то это ппц. Есть у JDatabase метод quote который помимо того что оборачивает переменные в кавычки еще и экранирует кавычки внутри строки. А если ид целочисленное, то можно просто к integer привести.  
« Последнее редактирование: 17.03.2016, 22:46:57 от zomby6888 » Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3591


« Ответ #8 : 17.03.2016, 22:38:01 »

Да он до этого, IMHO, еще не дошел.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #9 : 17.03.2016, 22:45:21 »

Да он до этого, IMHO, еще не дошел.

Ну, c этого по хорошему надо начинать.  
Записан
b2z
Support Team
*****

Репутация: +710/-0
Offline Offline

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #10 : 17.03.2016, 22:58:36 »

Ну, c этого по хорошему надо начинать. 
https://cmscafe.ru/razrabotka/547-sozdaem-bezopasnye-rasshireniya-dlya-joomla
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #11 : 17.03.2016, 23:13:56 »

Да кстатии, отличная статья. Всем разработчикам расширений для Joomla надо с нее начинать.
Записан
platonische
Давно я тут
****

Репутация: +0/-0
Offline Offline

Сообщений: 297


Парусные экспедиции vk.com/tc670


« Ответ #12 : 17.03.2016, 23:21:24 »

Все спасибо! Да не дошел. Читаю!
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet