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

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

Вывести в компоненте список пользователей из таблице users

 (Прочитано 989 раз)
0 Пользователей и 1 Гость смотрят эту тему.
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« : 26.03.2015, 22:56:58 »

Доброго времени суток. Не давно я написал свой первый компонент (есесн по урокам из сети) для Joomla 3.0. Суть компонента проста - есть таблица в БД куда пишутся заказы пользователей на грузоперевозки.

В админке админ  может тот или иной заказ отредактировать или удалить или же создать новый. Компонент в принципе примитивен - работает с одной таблицей бд. Но не давно потребовалось сделать так - что бы при редактирования или создании новой записи в админке в поле ИМЯ было не просто текстовое поле -  а выпадающий список всех пользователей, которые зарегистрированы на сайте.

Вот теперь парюсь и не знаю как это реализовать - умом понимаю что для этого нужно прописать новое обращение к таблице users в модуле, нужно в контроллере написать код который будет обрабатывать данные для вьюхи и в XML rt с формой вывести список - но трабла в том, что из-за не совершенства знаний самого фреймворка Joomla не могу точно понять что и куда писать.

Подскажите плз как научить компонент тянуть данные из другой таблицы БД )
Записан
passer
Живу я здесь
******

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

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



« Ответ #1 : 26.03.2015, 23:26:45 »

Код
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('id', 'username')));
$query->from($db->quoteName('#__users'));
$db->setQuery($query);
$users = $db->loadAssocList();
var_dump($users);
Имя таблицы и поля выборки написал отбалды.
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #2 : 26.03.2015, 23:32:42 »

Код
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('id', 'username')));
$query->from($db->quoteName('#__users'));
$db->setQuery($query);
$users = $db->loadAssocList();
var_dump($users);
Имя таблицы и поля выборки написал отбалды.
Код
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('id', 'username')));
$query->from($db->quoteName('#__users'));
$db->setQuery($query);
$users = $db->loadAssocList();
var_dump($users);
Имя таблицы и поля выборки написал отбалды.

это у нас получается просто выведет список ид пользователей если я не ошибаюсь ?
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #3 : 28.03.2015, 18:12:02 »

Неужели никто не знает ? Как мне привязать к xmk с формами результат выборки пользователей из бд в форме ?
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #4 : 28.03.2015, 18:20:42 »

Создаете кастомный типа поля в котором на основе выборки имен пользователей и их ид как выше показали формируете HTML select. Прописывате в вашей xml-ке путь к папке с этим полем.
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #5 : 28.03.2015, 18:23:59 »

Создаете кастомный типа поля в котором на основе выборки имен пользователей и их ид как выше показали формируете HTML select. Прописывате в вашей xml-ке путь к этому полю. Все просто.

 простите а можно чуть подробнее. У меня в XML ка с формами путь нигде не указан - список полей в форме edit.php выведен в цикле


Код:
 <?php foreach($this->form->getFieldset() as $field): ?>
  <?php if (!$field->hidden): ?>
  <?php echo '<b>'.$field->label.'</b>'; ?>
  <?php endif; ?>
  <?php echo $field->input; ?>
  <?php endforeach; ?>

если я создам в XML rt форму, то мне получается нужно как то в форму передать данные - и вот как раз в этом моменте я, простите за выражение, туплю по жесткому (
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #6 : 28.03.2015, 18:27:02 »

https://docs.joomla.org/Creating_a_custom_form_field_type
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #7 : 28.03.2015, 19:13:12 »

простите но все равно не все пронял. Вот смотрите - исходя из доков  мне нужно сделать по сути мульти запрос к бд - что бы данные выбирались из таблицы заказами + таблицы с пользователями

делаю
было

Код:
   $query->select($db->quoteName('b.username'));
$query->leftJoin(
    $db->quoteName('#__users', 'b')
    . ' ON '
    . $db->quoteName('b.id')
    . ' = ' . $db->quoteName('a.created_by')
);

стало
Код:
$query->select('a.*');
$query->from($db->quoteName('zdj5e_zakaz', 'a'));
// Присоединяем #__users
$query->select($db->quoteName('b.username'));
$query->leftJoin(
    $db->quoteName('zdj5e_users', 'b')
    . ' ON '
    . $db->quoteName('b.id')
   
);

запрос сам по себе рабочий. Его я провожу в файле administration/components/com_mycomponent/models/fields/mycomponent.php

На сколько я понимаю именно этот файл выводит данные для формы редактирования или создания материала - но теперь вопрос как мне в XML отдать данные ? Где находится этот переходный момент ?  Sad Angry
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #8 : 28.03.2015, 19:36:28 »

В xml-ке добавляете поле с  вашем типом, в котором выборка значений и генерация селектов. Добавляете также addfieldPath в xml-ке который будет указывать на папку с этим типом. По ссылке все подробно расписано, что где добавить в xml-ке и как создавать файлик с вашем типом поля, что вам непонятно то? Ну если вам так сложно напишите нужный вам селект прямо в вашем коде и не морочтесь с XML
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #9 : 28.03.2015, 19:38:50 »

английский не понятен Azn
На сколько я понимаю вы советуете  путь создания нового класса для поля - но я то делаю через тот класс который уже есть, что бы минимизировать работу (и багов не создавать Azn ).
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #10 : 28.03.2015, 19:43:53 »

Это вообще нормальная практика, что вы имеете ввиду под багами я незнаю. Не знаете английского, погуглите тоже самое на русском, думаю что материалов на эту тему немало, расписывать все это на форуме не вижу смысла.
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #11 : 28.03.2015, 19:46:03 »

вы поймите что я новичек в создании компонентов для Joomla - я до сих пор к примеру не могу понять смысла от 2ух файлов в контроллере или в моделе по типу mycomponentS и mycomponenT - по этому сейчас для меня это весьма трудоемко

Неужели нельзя сделать все в одном запросе ? Ну то есть к примеру есть запрос к бд который выводит все о заказе - к ниму Joinom  крепим данные из пользователей и все отправляем сразу в форму  ?
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #12 : 28.03.2015, 19:54:22 »

Выборка данных из нескольких таблиц вполне возможна, если использовать джоины и подзапросы в sql, только вот каким боком это относится к сабжу? Если вам надо просто вывести форму с данными, cделайте выборку и сформируйте HTML на основе этих данных. Это никак не относится ни к XML ни к Joomla
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #13 : 28.03.2015, 19:58:24 »

с одной стороны да - я так и думал сделать - сделать запрос - выбрать данные и вставить во вьюху с редактированием - н что делать если мы не создаем а редактируем запись ? То есть при создании нового заказа проблем нет - вывелись пустые формы и список пользователей, а при редактировании записи получится что выведится форма с заполненными полями + список пользователей, при чем выбран будет не тот пользователь который в заказе, а будет результат простой выборки - по этому я и хочу реализовать через XML - на сколько я понимаю именно благодаря такой реализации в Joomla без лишних усилий можно реализовать  добавление новых полей
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #14 : 28.03.2015, 20:13:25 »

Совершенно необязательно использовать xml-ку для создания/редактирования форм во фронтенде. Напротив, это вобщем-то лишний функционал. Разница между формами для создания новой записи и редактирования записей только в значениях по умолчанию, которые можно задать по условию.
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #15 : 28.03.2015, 20:23:38 »

Хм, тогда простите но встречный вопрос - вот к примеру попробовал сделать таким образом - вывести и сгенерировать выпадающий список с пользователями в форме

Код:
<form action="<?php echo JRoute::_('index.php?option=com_mycomponents&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="mycomponent-form" class="form-validate">
<div class=" fltlft">   
<fieldset class="adminform">
 
<!--Вывод данных из бд в форму + вкладки навигации в данном случае она одна-->
<ul class="nav nav-tabs">
<li class="active"><a href="#details" data-toggle="tab"><?php echo empty($this->item->id)? JText::_('COM_MYCOMPONENT_DETALIS') : JText::sprintf('COM_MYCOMPONENT_DETALIS', $this->item->id); ?></a></li>     
</ul>


 <?
$strSQL2 = "SELECT * FROM `zdj5e_users` Order by `id` ASC ";
$rs3 = mysql_query($strSQL2);
?>
<select name="name" >
<?
while($row = mysql_fetch_array($rs3)) { ?>
<option value="<? echo $row['name'] ?>"><? echo $row['name'] ?></option>
<?}?>
</select>




  <?php foreach($this->form->getFieldset() as $field): ?>
  <?php if (!$field->hidden): ?>
  <?php echo '<b>'.$field->label.'</b>'; ?>
  <?php endif; ?>
  <?php echo $field->input; ?>
  <?php endforeach; ?>
</fieldset>
</div>
 
 
 
<div>
  <input type="hidden" name="task" value="" />
  <?php echo JHtml::_('form.token'); ?>
</div>
</form>

при сохранении записи имя пользователя в бд не пишется
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #16 : 28.03.2015, 20:38:54 »

А потому что имя вашего селекта не совпадает с именем которая модель обрабатывает скорее всего посмотрите как называются другие поля в форме. Скорее всего что-то вроде name="jform[fieldname]"

Делайте форму на основе чего то одного, или даные из базы, или данные из XML. И не выполняйте запросы в виде, это дурной тон,  выполняйте их в модели или хелпере на крайняк.
« Последнее редактирование: 28.03.2015, 20:48:00 от zomby6888 » Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #17 : 28.03.2015, 20:45:34 »

пробовал и так

Код:
<?
$strSQL2 = "SELECT * FROM `zdj5e_users` Order by `id` ASC ";
$rs3 = mysql_query($strSQL2);
?>
<select  name="jform[name]" id="jform_name"    >
<?
while($row = mysql_fetch_array($rs3)) { ?>
<option value="<? echo $row['name'] ?>"><? echo $row['name'] ?></option>
<?}?>
</select>

все равно не пишет - хотя имя такое же как и если бы я через XML  вывел бы поле name  Angry Angry Angry
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #18 : 28.03.2015, 21:00:41 »

А в таблице у вас есть поле с именем name? Проанализируйте какие данные принимает контроллер, какие данные он передает в модель при сохранении.
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #19 : 28.03.2015, 21:02:07 »

В таблице ячейка есть - с этим все норм. Но как мне промониторить работ модели ? (уж простите - совсем запутлся)
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #20 : 28.03.2015, 21:08:39 »

Если у вас есть IDE, делайте точки останова и анализируйте переменные, раз уж вы разработкой занимаетесь, без этого вы особо не продвинетсь. Если вы упрямо пишите в блокнотике то делайте echo, print_r, var_dumb и отслеживайте цепочки вызовов методов. Когда в конец за...сь ставьте себе IDE :-)
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #21 : 30.03.2015, 13:37:37 »

А ведь все как всегда просто оказалось - и не стоит прописывать лишние запросы или ковырять поля - все элементарно.
В XML файле с формами можно прописать, как оказалось, запрос в бд с нужными данными. При этом запрос выведет нужный список с возможностью сохранения и редактирования. Вот пример того как сделал я


Код
<field name="name"
 type="sql"
 default="10"
 label="Name"
 query="SELECT name FROM zdj5e_users"
 key_field="name"
 />

результат - в поле Имя есть выпадающий список с нужными параметрами  Smiley Smiley Smiley Smiley Smiley
Записан
Страниц: [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