|
Sergey2
|
 |
« : 30.09.2010, 05:55:27 » |
|
Есть таблица в БД, созданная мной. В таблице идет привязка данных к id материала. Нужно при выводе материала вывести эти данные. Данные нужно вывести после заголовка и перед текстом, так что подойдет com_content. А как их выводить? Вернее даже не так. Как более правильно сформировать sql запрос?
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #1 : 30.09.2010, 07:22:45 » |
|
Подобная тема: http://joomlaforum.ru/index.php/topic,131575.msg719308.html#msg719308 добавляешь в выборку свое поле, скажем SELECT my.some_field .... а во фрагмент FROM присоединяешь свою таблицу, типо так: FROM #__content AS a LEFT JOIN #__mytable AS my ON my.article_id = a.id' А во вью материала выводишь так: echo $this->article->some_field;
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #2 : 30.09.2010, 19:19:29 » |
|
а у меня там должно не одно поле "вылести", а несколько. Как массив получить? Массив я знаю как обработать, а вот с SQL у меня туго 
|
|
|
|
|
Записан
|
|
|
|
|
userxp
|
 |
« Ответ #3 : 30.09.2010, 19:42:40 » |
|
$sql = "SELECT id, title, alias FROM #__content WHERE state=1 LIMIT 10"; $db = &JFactory::getDBO(); $db->setQuery( $sql ); $rows = $db->loadAssocList(); print_r( $rows );
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #4 : 30.09.2010, 19:46:21 » |
|
$sql = "SELECT id, title, alias FROM #__content WHERE state=1 LIMIT 10"; $db = &JFactory::getDBO(); $db->setQuery( $sql ); $rows = $db->loadAssocList(); print_r( $rows ); неее, ну на таком уровне я sql знаю. Как его в вышепрведенный пример засунуть? Или $this->article->some_fields->rows - и есть нужный мне массив?
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #5 : 30.09.2010, 19:49:04 » |
|
Блин... SELECT my.some_field, my.some_field2, my.some_field3 ...
echo $this->article->some_field; echo $this->article->some_field2; echo $this->article->some_field3;
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #6 : 30.09.2010, 19:52:28 » |
|
Блин... SELECT my.some_field, my.some_field2, my.some_field3 ...
echo $this->article->some_field; echo $this->article->some_field2; echo $this->article->some_field3;
я наверно некоректно выразился. Не поле а запись. Т.е. заданному SELECT будут соответствовать несколько записей. Мне бы массив получить....
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #7 : 30.09.2010, 20:18:19 » |
|
У вас одному материалу соответсвтвует несколько записей? Тогда думаю (по крайней мере будет проще) нужно делать отдельный запрос в вашу таблицу после if ( ! $this->_article ) { return false; } пишем $query = 'SELECT *. ' FROM #__mytable AS my' . ' WHERE my.id = ' . (int) $this->_id; $this->_db->setQuery($query); $this->_article->myfields = $this->_db->loadObjectList(); print_r($this->_article->myfields);
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #8 : 30.09.2010, 20:21:26 » |
|
У вас одному материалу соответсвтвует несколько записей? да, именно так. Тогда думаю (по крайней мере будет проще) нужно делать отдельный запрос в вашу таблицу после if ( ! $this->_article ) { return false; } пишем $query = 'SELECT *. ' FROM #__mytable AS my' . ' WHERE my.id = ' . (int) $this->_id; $this->_db->setQuery($query); $this->_article->myfields = $this->_db->loadObjectList(); print_r($this->_article->myfields); ясно, спасибо.
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #9 : 02.10.2010, 01:02:44 » |
|
и последний глупый вопрос. Вот сделал я это все. Наковырял в form.php и в админке. А как теперь сделать так что бы сохранялось это после редактирования материала? Когда поле в той же таблице как и митериал (ну или в другой таблице), то оно "само" сохраняется. Но у меня там не одно поле, а несколько и сколько конкретно неизвестно. В каком месте все это дело сохраняется? Где ковырять?
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #10 : 08.10.2010, 16:04:52 » |
|
А как с массивами работать? Вот поле metadata в таблице _content - это же массив. Как мне сделать такое же поле?
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #11 : 08.10.2010, 16:18:53 » |
|
Это обычное ничем не примечаетьное поле типа text. Чтобы получить значения из поля metadata: $params = new JParameter($row->metadata); echo $params->get('robots'); echo $params->get('author'); чтобы записать: $params = new JParameter(''); $params->set('author', 'вася'); echo $params->toString();
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #12 : 08.10.2010, 16:20:07 » |
|
Можно сохранять и вытягивать чистый массив, без всяких jparameter. Тут на помощь придут php-функции serialize() и unserialize()
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #13 : 08.10.2010, 16:27:28 » |
|
Неее, мне не надо работать с metadata. Я хочу создать вот такую фигню: При редактировании материала есть выпадающий список: <select><option ... и т.д. Собственно с ним я работать научился. Все нормально. Но мне нужно что бы в этом селекте можно было выбрать несколько значений, т.е. уже не одна переменная <select name"my_element" ... а <select name"my_element[]"... вот как этот массив мне сохранить?
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #14 : 08.10.2010, 16:38:55 » |
|
$values = JRequest::getVar('my_element', array(), 'array'); в базу пишем implode('|', $values)
в параметрах модуля это все автоматизировано кстати.
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #15 : 08.10.2010, 16:43:07 » |
|
$values = JRequest::getVar('my_element', array(), 'array'); в базу пишем implode('|', $values)
в параметрах модуля это все автоматизировано кстати.
а можно поподробней для тупых, типа меня. У меня проблема именно с сохранением в базу. Раньше я ничего для этого не делал. Сделал как тут написано http://joomlaforum.ru/index.php/topic,40455.0.html и все само сохранялось. Куда надо вставить строчку implode('|', $values) что бы в базу записалось?
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #16 : 08.10.2010, 16:58:38 » |
|
А..ну тогда чесно говоря не подскажу... И помоему проще не воротить такую кучу файлов, а добавить в administrator\components\com_content\models\article.xml в раздел params это: <param name="my_element" type="list" label="My Element"> <option value="0">value 1</option> <option value="1">value 2</option> <option value="2">value 3</option> </param>
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #17 : 08.10.2010, 17:02:36 » |
|
А..ну тогда чесно говоря не подскажу... И помоему проще не воротить такую кучу файлов, а добавить в administrator\components\com_content\models\article.xml в раздел params это: <param name="my_element" type="list" label="My Element"> <option value="0">value 1</option> <option value="1">value 2</option> <option value="2">value 3</option> </param> мне это для каждого материала нужно  Тогда остается только вариант с "конвертацией" массива в одну переменную в джаваскрипте.
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #18 : 08.10.2010, 17:09:47 » |
|
мне это для каждого материала нужно  И что? твой параметр появится рядом с Псевдоним автора, Уровень доступа, Дата создания и тдд.. они же в каждом материале есть, верно?
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #19 : 08.10.2010, 17:15:08 » |
|
И что? твой параметр появится рядом с Псевдоним автора, Уровень доступа, Дата создания и тдд.. они же в каждом материале есть, верно?
как там одновременно выбирать несколько значений?
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #20 : 08.10.2010, 17:47:21 » |
|
в Joomla нет такой фишки. нужно дописывать самому. но это не сложно. береш за основу list( libraries/joomla/html/elemets/list.php вродебы...) Кидаешь в administrator\components\com_content\elements, переименовываешь в скажем multylist. Далее внутри тоже все переименовываешь в multylist, и JHTML::_('select.generic'...) или как оно там.. добавляешь еще атрибуты multiple="multiple" size="10". Вот и усе. в xml'ке вместо list указываешь тип multylist
верней multilist
|
|
|
|
|
Записан
|
|
|
|
|
Sergey2
|
 |
« Ответ #21 : 08.10.2010, 19:28:54 » |
|
в Joomla нет такой фишки. нужно дописывать самому. но это не сложно. береш за основу list( libraries/joomla/html/elemets/list.php вродебы...) Кидаешь в administrator\components\com_content\elements, переименовываешь в скажем multylist. Далее внутри тоже все переименовываешь в multylist, и JHTML::_('select.generic'...) или как оно там.. добавляешь еще атрибуты multiple="multiple" size="10". Вот и усе. в xml'ке вместо list указываешь тип multylist
верней multilist
мда. Пока решил вопрос через скрипт на джаваскрипт, который перед сохранением, "собирает" значения в одно поле. Потом, перед выдачей пользователю, на PHP распарсиваю обратно 
|
|
|
|
|
Записан
|
|
|
|
|