Новости Joomla

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

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #240 : 29.10.2015, 17:19:51 »
Мы рассуждаем так:
Нам нужно вывести список названий сборников - это параметр [title]. Также нужно вывести список названий материалов - это параметр [articleTitle]. Но нам нужно, чтобы список материалов относился именно к данному сборнику. Тогда, выходит, нам нужно к параметру [title] сборника добавить параметр [id] сборника. И к параметру [articleTitle] материала тоже нужно добавить параметр [id] сборника. Ну и  id материала тоже выведем, на всякий случай - за это отвечает параметр  [articleId]

Таким образом, мы получаем массив такого вида:

[id][title]
- [id][articleId][articleTitle]

Скажите, пожалуйста, правильно мы рассуждаем?

*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #242 : 30.10.2015, 16:38:16 »
Вот, мы пока додумались только до того, как из нашего массива вывести просто список сборников (кликабельный):
------------------------------------------
Код
<?php foreach ($list as $item) :  ?>
    <li>
        <a href="<?php echo $item->link; ?>">
            <?php echo $item->title; ?></a>
    </li>
<?php endforeach; ?>
------------------------------------------
А вот как присоединять к сборнику вывод материалов мы пока не нашли.
И как наш двухуровневый массив преобразовать в  массив такого вида:

[id][title]
- [id][articleId][articleTitle]

...тоже непонятно.
Нашли информацию, что нам нужно делать не var_dump(), a

Код
echo "<pre>";
print_r($object);
echo "</pre>";

Но мы, если честно, не разобрались, что такое var_dump() и <pre>.
Направьте нас, пожалуйста, в нужную сторону. Правильно ли мы начали составлять код? В чём у нас ошибки? На что нам нужно обратить своё внимание?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Создание папок из фронтенда
« Ответ #243 : 30.10.2015, 17:41:01 »
Я же говорю - надо в методе getItems() модели пересобрать массив. Сделать там foreach ($items as $item) и составить новый массив.

Ну что-то вроде:

Код: php
$compilations = array();

foreach ($items as $item)
{
$article = new stdClass;
$article->id       = $item->articleId;
$article->title    = $item->articleTitle;
$article->alias    = $item->articleAlias;
$article->category = $item->articleCategory;

$compilations[$item->id]['article'] = $article;

$compilation = new stdClass;
$compilation->id               = $item->id;
$compilation->title            = $item->title;
$compilation->state            = $item->state;
$compilation->checked_out      = $item->checked_out;
$compilation->checked_out_time = $item->checked_out_time;
$compilation->created_by       = $item->created_by;
$compilation->editor           = $item->editor;

$compilations[$item->id]['compilation'] = $compilation;
}

return $compilations;

Потом в макете проверьте, что получилось:

Код: php
<?php foreach ($list as $item) :
echo "<pre>";
print_r($item);
echo "</pre>";
endforeach; ?>


P.S.
А print_r и var_dump используются для вывода чистых данных. Уж могли бы сами нагуглить, что это такое...
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #244 : 30.10.2015, 22:32:42 »
b2z, Вы извините нас, пожалуйста за глупые и элементарные вопросы. Прежде чем писать сюда что-либо, мы по нескольку часов тратим на поиск нужной информации в интернете, а затем осмысление этой информации. А, поскольку мы часто не знаем, что именно мы ищем, то и результат получается соответствующий.

Вот, например, мы прочитали Ваше сообщение.
1. Первым делом вставили Ваш код в в файл compilations.php (который находится в папке models компонента).
Вот код, который у нас получился после вставки Вашего кода:
Спойлер
[свернуть]

2. Затем мы в макет (views/compilations/tmpl/default.php) вставили второй код.
Вот код, который у нас получился:
Спойлер
[свернуть]

3. Мы переустановили компонент, нажали на представление для списка сборников. У нас появилось 2 ошибки:
Первая - Warning: Invalid argument supplied for foreach() in Z:\home\starting\www\components\com_chmos\models\compilations.php on line 215
Вторая - Warning: Invalid argument supplied for foreach() in Z:\home\starting\www\components\com_chmos\views\compilations\tmpl\default.php on line 29

4. Мы пошли разбираться с первой ошибкой. Смотрим - она находится на линии 215. Вот это место:
Спойлер
[свернуть]

5. Мы вспоминаем, что предыдущий вариант кода
Код
public function getItems()
{
 $items = parent::getItems();
return $items;
}
...ошибок не выдавал и массив на экран выводил. Мы смотрим, что у нас изменилось? У нас исчез параметр $items (который содержит результаты выборки из таблицы, как мы поняли) и появился новый параметр $compilation. Получается, нам надо как-то $items связать с $compilation?
Мы идём в интернет искать информацию на тему того, как должна выглядеть функция public function getItems()
Вот такой у неё вид:
public function getItems()
    {
        $items = parent::getItems();
 
        foreach ($items as &$item) {
            $item->url = 'index.php?option=com_simple&amp;task=user.edit&amp;id=' . $item->id;
        }
 
        return $items;
    }

Мы сегодня с самого утра читаем про создание массивов, молчим про то, что мы с кодом успели навытворять за это время. Результат нулевой.
Поэтому снова идём к Вам за помощью.
Подскажите, пожалуйста, что мы не так сделали? Пропустили какую-то функцию? Параметр $items потеряли?
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #245 : 30.10.2015, 22:44:03 »
А насчёт  print_r и var_dump - мы поняли, что это функции, показывающие массив на экране. Первый вариант - строками, а второй - структурой.
Мы не поняли, почему наш первый вариант print_r($this->items); нужно менять на
echo "<pre>";
print_r($item);
echo "</pre>";

Откуда взялось это </pre> и с чем его едят? Но здесь мы уже, действительно, поленились и не стали углубляться в дебри. Мы пошли углубляться в дебри public function getItems(). =)
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #246 : 30.10.2015, 23:05:19 »
Цитировать
3. Мы переустановили компонент, нажали на представление для списка сборников. У нас появилось 2 ошибки:
А зачем вы каждый раз переустанавливаете компонент? Вы проверяете на локальном сервере? вносите правки прямо на сервере (не забывая делать бекапы, просто упаковывая периодически папки компонента а архивы рядышком), тогда вы будете видеть все изменения сразу, просто обновив соответствующую страницу в браузере
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #247 : 30.10.2015, 23:19:05 »
Ошибка в 215 строке в модели возникает от того, что вы  внутри getItems() пытаетесь работать с $items, которого не существует, вам его сначала нужно получить откуда-то, значит в самом начале функции вставьте $items = parent::getItems(); и больше не убирайте эту строчку оттуда никогда.

Вторая ошибка - у вас отсутствует объект $list, замените $list на $this->items
Вся строка должна принять вид:
Код
 <?php foreach ($this->items as $item) :
b2z сделал этот пример абстрактным, вы по его идее должны были догадаться адаптировать под конкретное место: $list - это список, все списки в php - это массивы, в каком массиве прилетают все списки в шаблон вида? правильно, в $this->items (это классический вариант, он бывает и другим, но вам сейчас на этом не стоит заморачиваться)

Про <pre> - что это такое, а зачем - увидите, когда примените (оч. удобно)
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #248 : 31.10.2015, 00:03:30 »
AlekVolsk, спасибо Вам большое за подсказки!
Совет насчёт того, чтобы вносить правки прямо на сервере - просто гениален! =) Мы теперь именно так и будем работать, прямо с локального сервера.
-----------------------------
$items = parent::getItems(); вернули на место. Ошибка 215 исчезла!
А вот ошибка Warning: Invalid argument supplied for foreach() in Z:\home\starting\www\components\com_chmos\views\compilations\tmpl\default.php on line 29 исчезать не хочет, хотя мы заменили $list на $this->items.
Всё равно говорит, что в этом месте: <?php foreach ($this->items as $item) : - что-то не так...
   
Мы подумали, что, может быть не надо в <?php> засовывать код и ставить его сразу под этим:
<?php
/**
 * @version     1.0.0
 * @package     com_chmos
 * @copyright   © 2015. Все права защищены.
 * @license     GNU General Public License версии 2 или более поздней; Смотрите LICENSE.txt
 * @author      Дмитрий Рекун <b2z@joomlablog.ru> - http://norrnext.com
 */
// no direct access
defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');

$user       = JFactory::getUser();
$userId     = $user->get('id');
$listOrder  = $this->state->get('list.ordering');
$listDirn   = $this->state->get('list.direction');
$canCreate  = $user->authorise('core.create', 'com_chmos');
$canEdit    = $user->authorise('core.edit', 'com_chmos');
$canCheckin = $user->authorise('core.manage', 'com_chmos');
$canChange  = $user->authorise('core.edit.state', 'com_chmos');
$canDelete  = $user->authorise('core.delete', 'com_chmos');
?>
<?php foreach ($this->items as $item) :
echo "<pre>";
   print_r($item);
   echo "</pre>";
endforeach;
?>

--------------------------------------------------
.....А вставить наш код прямо в этот <?php>-объект?
<?php
/**
 * @version     1.0.0
 * @package     com_chmos
 * @copyright   © 2015. Все права защищены.
 * @license     GNU General Public License версии 2 или более поздней; Смотрите LICENSE.txt
 * @author      Дмитрий Рекун <b2z@joomlablog.ru> - http://norrnext.com
 */
// no direct access
defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');

$user       = JFactory::getUser();
$userId     = $user->get('id');
$listOrder  = $this->state->get('list.ordering');
$listDirn   = $this->state->get('list.direction');
$canCreate  = $user->authorise('core.create', 'com_chmos');
$canEdit    = $user->authorise('core.edit', 'com_chmos');
$canCheckin = $user->authorise('core.manage', 'com_chmos');
$canChange  = $user->authorise('core.edit.state', 'com_chmos');
$canDelete  = $user->authorise('core.delete', 'com_chmos');
foreach ($this->items as $item) :
echo "<pre>";
   print_r($item);
   echo "</pre>";
endforeach;

?>
------------------
Но и этот вариант тоже ничего не дал. Ошибка в данном случае в этой строке: foreach ($this->items as $item) :...

*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #249 : 31.10.2015, 00:07:46 »
А покажите пожалуйста полностью функцию getItems() из модели и покажите содержимое components\com_chmos\views\compilations\view.html.php
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #250 : 31.10.2015, 00:18:37 »
Вот, public function getItems()
Спойлер
[свернуть]

.....Может быть, нам нужно ещё return $items; в неё добавить?
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #251 : 31.10.2015, 00:19:58 »
А вот views\compilations\view.html.php:
Спойлер
[свернуть]
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #252 : 31.10.2015, 00:26:40 »
.....Может быть, нам нужно ещё return $items; в неё добавить?
Нет, в getItems() вроде все правильно, хотя проверки ради вы можете перед return $compilations; временно вставить код
Код
print_r('<pre>');
print_r($compilations);
print_r('</pre>');
и посмотреть, что получится: по идее, в массиве должны быть соответствующие данные

______________________________

А вот в view.html.php у вас ну совсем не все в порядке.
Зачем там вывод формы? это должно быть в views\compilations\tmpl\default.php или вы мне дали не тот файл

*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #253 : 31.10.2015, 00:31:41 »
Ой, извините, невнимательно прочитали, что именно Вам нужно.
Вот то, что Вы просили:
Спойлер
[свернуть]
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #254 : 31.10.2015, 00:34:01 »
Вроде все нормально.
Попробуйте в шаблоне вида вместо
foreach ($this->items as $item) :
echo "<pre>";
   print_r($item);
   echo "</pre>";
endforeach;


написать
echo "<pre>";
print_r($this->items);
echo "</pre>";

*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #255 : 31.10.2015, 00:41:57 »
Вставили код:
Код
print_r('<pre>');
print_r($compilations);
print_r('</pre>');

Всё отображается, как Вы и говорите:
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #256 : 31.10.2015, 00:49:16 »
http://prntscr.com/8x8b1s меня смущает, куда подевался id, который там должен быть
Похоже на то, что либо таблица сборников пуста, либо запрос составлен неверно, либо нарушена связь между сборниками и их материалами
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #257 : 31.10.2015, 00:49:39 »
Сейчас мы убрали вот этот код, который вставляли перед return $compilations; в getItems()
Код
print_r('<pre>');
print_r($compilations);
print_r('</pre>');

И в шаблоне вида вместо
Код
foreach ($this->items as $item) :
echo "<pre>";
   print_r($item);
   echo "</pre>";
endforeach;

написали
Код
echo "<pre>";
print_r($this->items);
echo "</pre>";

Вот код, который сейчас имеем:
Код
<?php
/**
 * @version     1.0.0
 * @package     com_chmos
 * @copyright   © 2015. Все права защищены.
 * @license     GNU General Public License версии 2 или более поздней; Смотрите LICENSE.txt
 * @author      Дмитрий Рекун <b2z@joomlablog.ru> - http://norrnext.com
 */
// no direct access
defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');

$user       = JFactory::getUser();
$userId     = $user->get('id');
$listOrder  = $this->state->get('list.ordering');
$listDirn   = $this->state->get('list.direction');
$canCreate  = $user->authorise('core.create', 'com_chmos');
$canEdit    = $user->authorise('core.edit', 'com_chmos');
$canCheckin = $user->authorise('core.manage', 'com_chmos');
$canChange  = $user->authorise('core.edit.state', 'com_chmos');
$canDelete  = $user->authorise('core.delete', 'com_chmos');
echo "<pre>";
print_r($this->items);
echo "</pre>";
?>
 



<form action="<?php echo JRoute::_('index.php?option=com_chmos&view=compilations'); ?>" method="post" name="adminForm" id="adminForm">


<table class="table table-striped" id="compilationList">
<thead>
<tr>
<?php if (isset($this->items[0]->state)): ?>
<th width="5%">
<?php echo JHtml::_('grid.sort', 'JPUBLISHED', 'a.state', $listDirn, $listOrder); ?>
</th>
<?php endif; ?>



<?php if (isset($this->items[0]->id)): ?>
<th width="1%" class="nowrap center hidden-phone">
<?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
</th>

<th>
<?php echo JText::_('COM_CHMOS_TITLE'); ?>
</th>

<?php if ($canEdit || $canDelete): ?>
<th class="center">
<?php echo JText::_('COM_CHMOS_COMPILATIONS_ACTIONS'); ?>
</th>
<?php endif; ?>
<?php endif; ?>

</tr>
</thead>
<tfoot>
<tr>
<td colspan="<?php echo isset($this->items[0])? count(get_object_vars($this->items[0])) : 10; ?>">
<?php echo $this->pagination->getListFooter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php foreach ($this->items as $i => $item) : ?>
<?php $canEdit = $user->authorise('core.edit', 'com_chmos'); ?>

<?php if (!$canEdit && $user->authorise('core.edit.own', 'com_chmos')): ?>
<?php $canEdit = JFactory::getUser()->id == $item->created_by; ?>
<?php endif; ?>

<tr class="row<?php echo $i % 2; ?>">

<?php if (isset($this->items[0]->state)): ?>
<?php $class = ($canEdit || $canChange)? 'active' : 'disabled'; ?>
<td class="center">
<a class="btn btn-micro <?php echo $class; ?>" href="<?php echo ($canEdit || $canChange)? JRoute::_('index.php?option=&task=compilation.publish&id=' . $item->id . '&state=' . (($item->state + 1) % 2), false, 2) : '#'; ?>">
<?php if ($item->state == 1): ?>
<i class="icon-publish"></i>
<?php else: ?>
<i class="icon-unpublish"></i>
<?php endif; ?>
</a>
</td>
<?php endif; ?>



<?php if (isset($this->items[0]->id)): ?>
<td class="center hidden-phone">
<?php echo (int) $item->id; ?>
</td>
<td class="center hidden-phone">
<?php echo $this->escape($item->title); ?>
</td>
<?php endif; ?>

<?php if ($canEdit || $canDelete): ?>
<td class="center">
<?php if ($canEdit): ?>
<a href="<?php echo JRoute::_('index.php?option=com_chmos&task=compilationform.edit&id=' . $item->id, false, 2); ?>" class="btn btn-mini" type="button"><i class="icon-edit" ></i></a>
<?php endif; ?>
<?php if ($canDelete): ?>
<button data-item-id="<?php echo $item->id; ?>" class="btn btn-mini delete-button" type="button"><i class="icon-trash" ></i></button>
<?php endif; ?>
</td>
<?php endif; ?>

</tr>
<?php endforeach; ?>
</tbody>
</table>

<?php if ($canCreate): ?>
<a href="<?php echo JRoute::_('index.php?option=com_chmos&task=compilationform.edit&id=0', false, 2); ?>"
class="btn btn-success btn-small"><i
class="icon-plus"></i> <?php echo JText::_('COM_CHMOS_ADD_ITEM'); ?></a>
<?php endif; ?>

<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" />
<input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" />
<?php echo JHtml::_('form.token'); ?>
</form>

<script type="text/javascript">

jQuery(document).ready(function () {
jQuery('.delete-button').click(deleteItem);
});

function deleteItem() {
var item_id = jQuery(this).attr('data-item-id');
if (confirm("<?php echo JText::_('COM_CHMOS_DELETE_MESSAGE'); ?>")) {
window.location.href = '<?php echo JRoute::_('index.php?option=com_chmos&task=compilationform.remove&id=', false, 2)?>' + item_id;
}
}
</script>

А вот как это выглядит на сайте:
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #258 : 31.10.2015, 00:55:29 »
из-за отсутствия нумерации массива (когда в модели $compilations[$item->id]['article'] = $article; срабатывает некорректно) и вылетает ошибка при переборе массива в шаблоне вида
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #259 : 31.10.2015, 01:01:28 »
Странно, у нас какая-то путаница со сборниками произошла.
Куда-то делись созданные сборники....
------------------------------------------
Ну да ладно, мы сейчас в это не лезем. Только что мы создали новый сборник (назвали его "новый"), после чего опубликовали материал, назначив ему этот сборник (название материала - "первый").

Вот что у нас вышло:
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #260 : 31.10.2015, 01:04:03 »
Вставьте перед return $compilations; в getItems()
Код
print_r('<pre>');
print_r($items);
print_r('</pre>');
и покажите результат
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #261 : 31.10.2015, 01:12:46 »
Это скрин 128 страницы, её верхней части...
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #262 : 31.10.2015, 01:14:42 »
А это нижней.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #263 : 31.10.2015, 01:17:07 »
Низ 128 страницы покрупнее.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #264 : 31.10.2015, 01:18:47 »
Страниц так много потому что мы сейчас работаем с профиля администратора, а у него много созданного материала, который, разумеется, в сборники не заносится.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: Создание папок из фронтенда
« Ответ #265 : 31.10.2015, 01:23:32 »
Вывод однозначный: некорректно составлен запрос.
В запросе вы сначала делаете выборку материалов, а уже потом к ним сборников, что по логике уже неверно (все равно, что пытаться съесть конфетку, не развернув фантик).
Кстати, классическая ошибка, когда пытаетесь свой компонент связать со сторонним, ибо материалы у вам могут быть любые, в т.ч. не связанные со сборниками изначально, значит они не должны попадать в выборку, значит в запросе выборка материалов должна проходить дополнительный НД через объединение, а не основной.

К сожалению, я не знаю всей структуры вашего компонента, я не слежу тщательно за топиком, потому составить запрос корректно помочь не смогу, b2z вам, если пожелает, поможет быстрее.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #266 : 31.10.2015, 01:47:08 »
AlekVolsk, спасибо Вам за помощь и поддержку. Мы ценим то, что Вы сегодня уделили нам свой вечер. Мы замечаем, насколько много Вы и ваши коллеги (про автора b2z и упоминать даже стыдно - отдельное памятник можно человеку поставить) уделяете нам своего внимания и времени.
Доброй Вам ночи!
-----------
"Материалы у вас могут быть любые, в т.ч. не связанные со сборниками изначально, " - это верно
"значит они не должны попадать в выборку", - нам нужно выводить список всех материалов автора, даже если они не относятся к какому-либо сборнику.

То есть по идее нужно, чтобы было примерно так:

Сборник 1
- материал 1
- материал 2
Сборник 2
- материал 3
- материал 4

материал 5
материал 6

*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Создание папок из фронтенда
« Ответ #267 : 31.10.2015, 01:55:50 »
То есть по идее нужно, чтобы было примерно так:

Сборник 1
- материал 1
- материал 2
Сборник 2
- материал 3
- материал 4

материал 5
материал 6


учитывая что у вас вывод с пагинацией, то для вас будет проще разбить на несколько подзапросов!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #268 : 31.10.2015, 02:06:03 »
"...Ну да, данные то другие пришли - список материалов и данные сборников, которые относятся к каждому конкретному материалу. Теперь надо думать, как их сгруппировать по сборникам. Я бы в getItems() прошелся по всем данным и собрал их в новый многомерный массив.

Ну или другой вариант - поменять запрос, чтобы сначала выбрать все сборники, а потом к каждому сборнику сделать выборку материалов. Но это больше запросов к базе (проход по массиву сборников и на каждый сборник еще свой доп. запрос). Не очень..." (автор b2z)

Istaan, скажите, пожалуйста, подзапросы, о которых говорите Вы и о которых говорит автор b2z - это одно и то же?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Создание папок из фронтенда
« Ответ #269 : 31.10.2015, 02:39:46 »
Istaan, скажите, пожалуйста, подзапросы, о которых говорите Вы и о которых говорит автор b2z - это одно и то же?
Я всю тему не читал, так что не знаю о каких подзапросах говорил b2z!
Но в общем
в getListQuery вам нужно сделать запрос для получения только сборников!


Я структуры таблиц и данных незнаю так что напишу приблизительно как:

допустим в модели нам нужно получить спискок категорий и присоединить к каждой категории материалы относящиеся к этой категории

Код: php
public function getListQuery(){
$query = $query = $this->getDbo()->getQuery( true )
->select( 'id, title, alias' )
->from( '#__categories' )
->where( 'extension=' . $this->getDbo()->q( 'com_content' ) )
->where( 'published=1' );
return $query;
}

А дальше например в помощнике вида сделать такой метод:
Код: php
static function appendArticlesByCategory( &$items )
{
$cid = array();
foreach ( $items as &$item ) {
$item->articles = array(); //добавляем сразу в объекты массива с категориями массив articles
$cid[] = $item->id; // получаем id категорий
}
$cid = array_unique( $cid );
if ( count( $cid ) ) {
$db = JFactory::getDbo();
//запрос для получения всех материалов из категорий которые в запросе
$query = $db->getQuery( true )
->select( 'id, title, alias, catid' )
->from( '#__content' )
->where( 'catid IN (' . implode( ',', $cid ). ')' )
->order( 'ordering ASC' );
$articles= $db->setQuery( $query )->loadObjectList();

$iist= array();
//перебираем получение материалы и записуем их в массив по категории
foreach ( $articles as $article ) {
$iist[$article ->catid][] = $article;
}
//а тут уже непосредственно добавляем к категориям всем материалы которые в этой категории
foreach ( $items as &$item ) {
if ( isset( $iist[$item->id] ) ) $item->articles = $iist[$item->id];
}
}
}

в виде после того как вы получили
$this->items = $this->get('Items');
вызвать ClassHelperName::appendArticlesByCategory($this->items);

В итоге на выхлопе получите что то типа:
Спойлер
[свернуть]


« Последнее редактирование: 31.10.2015, 02:49:50 от Istaan »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Создание релиза компонента средствами GitHub

Автор SkyAn

Ответов: 4
Просмотров: 725
Последний ответ 01.11.2019, 17:42:04
от Septdir
[Решено] Создание контент плагина

Автор IvanTopor

Ответов: 4
Просмотров: 1255
Последний ответ 26.02.2016, 13:10:37
от IvanTopor
Создание динамических полей в своем компоненте

Автор NeuroZ

Ответов: 14
Просмотров: 1464
Последний ответ 18.08.2015, 11:17:59
от b2z
Создание таблиц средствами компонента

Автор spirit1086

Ответов: 3
Просмотров: 1043
Последний ответ 18.08.2015, 10:17:09
от spirit1086
Создание изображений PHP и GD

Автор vita1971

Ответов: 6
Просмотров: 927
Последний ответ 10.05.2015, 13:10:38
от vita1971