Новости Joomla

👩‍💻 Компонент "CS Афиши" для Joomla.

👩‍💻 Компонент "CS Афиши" для Joomla.

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

В состав пакета расширений входят:
- Компонент "CS Афиши"
- Модуль "Календарь событий"
- Модуль "Предстоящие события"
- Библиотека "ImgResize"

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

Модуль "Календарь событий" отображает предстоящие и прошедшие мероприятие на календаре, с отображением мероприятий на конкретную дату во всплывающем окне.

Модуль "Предстоящие события" показывает список предстоящий событий по порядку их наступления.

P.S. Расширение платное, но плата символическая, чисто для отработки приема платежей. Ключи без ограничения по времени, купившие сейчас - смогут обновляться без ограничений.

Разработчик - участник нашего сообщества Дмитрий Денисов (@codersite).

Страница расширения
Демо

Яндекс выпустил инструмент Видимость сайта в Алисе AI.

Яндекс выпустил инструмент Видимость сайта в Алисе AI.

С тех пор, как в поисковиках появились нейроответы ИИ, трафик на сайты стал гораздо меньше, так как пользователь стал получать информацию непосредственно на странице поисковика без перехода на сайт. Но при генерации ответа ИИ указывает источники - ссылки на сайты, информация которых была использована для генерации ответа.

Долгое время у всех был немой вопрос: "Как же теперь оценивать эффективность сайта?". Теперь этот на этот вопрос отчасти отвечает новый инструмент аналитики.
Процитируем справку Яндекса по инструменту:
На запросы пользователей в Поиске может отвечать Алиса AI. Ответы появляются в поисковой выдаче, в объектных ответах и на отдельной вкладке Поиска. В них чаще всего упоминаются страницы сайтов, на которые Алиса AI опиралась при подготовке ответа.

С помощью инструмента Видимость сайта в Алисе AI в Яндекс Вебмастере вы можете:
- узнать долю упоминаний сайта среди источников в ответах Алисы AI в Поиске и отследить динамику изменений;
- посмотреть примеры запросов, по которым страницы сайта показываются в ответах Алисы AI;
- посмотреть примеры сайтов той же тематики, которые часто упоминаются в генеративной выдаче.
Данные отображаются за последние 3 месяца и обновляются каждую неделю.

Статистика собирается только по тем запросам, по которым ваш сайт уже находится достаточно высоко в поисковой выдаче. Это позволяет анализировать видимость именно в той нише, где вы заинтересованы в продвижении, и избегать «размытия» по малозначимым для вас запросам.

Кроме того, такой подход обусловлен работой Алисы AI: она строит ответ с опорой на самые релевантные, информативные и качественные страницы, которые обычно занимают высокие позиции в Поиске.

Чтобы увидеть статистику вашего сайта в меню Яндекс.Вебмастера перейдите в раздел "Эффективность" и далее в "Показы сайта в Алисе AI".

В начале февраля 2026г. был вебинар с Михаилом Сливинским - амбассадором Поиска Яндекса, и в рамках вебинара была озвучена просьба сделать такой инструмент. Скорее всего разработка на тот момент уже велась, потому что от просьбы до релиза прошло около 2-х месяцев. В любом случае хорошо, что такая статистика появилась.

Показы сайта в Алисе AI в вашем Яндекс,Вебмастере.

@joomlafeed

👩‍💻 ИИ-админ для Joomla ближе, чем вы думаете: Joomla MCP.

👩‍💻 ИИ-админ для Joomla ближе, чем вы думаете: Joomla MCP.

В февральском номере Joomla Community Magazine в статье Evolving Joomla - Joomla CMS MCP Server: Opening the Door to AI-Powered Administration рассказывается о работе команды разработчиков над внедрением в ядро Joomla MCP-сервера.

Что такое MCP-сервер?
Последние годы всех захватывает бум ИИ-технологий. Появились ИИ-агенты - программы, устанавливаемые на сервер или компьютер, которые получают от вас запрос или задачу в человеческом виде и могут выполнять действия с файлами, ходить по сайтам, создавать сайты, программировать и т.д. Люди используют ИИ-агентов в самых разных ситуациях: от написания и проверки кода (даже там, где язык программирования не знаете совсем) до планирования путешествий и бронирования гостиницы.

ИИ-агенты могут использовать различные программные инструменты по протоколу Model Context Protocol (MCP). Для этого разработчик программы должен внедрить MCP в свой продукт или сервис. Так, например, ваш ИИ-агент может ходить по сайтам через браузер и собирать нужную информацию, управляя браузером через MCP-сервер. Или использовать функционал IDE PHP Storm для написания кода, сбора и отладки ошибок, использовать поиск PHP Storm по кодовой базе, а не простой текстовый поиск по файлам. MCP предоставляет набор функций для полноценного управления программным обеспечением.

В случае с Joomla, сервер MCP может предоставить администраторам следующие возможности:
- Автоматическое создание категорий, материалов и меню на основе карты сайта или PDF-файла.
- Создавайть SEO-оптимизированные заголовки и метаописания в пакетном режиме.
- Обновлять расширения на нескольких сайтах одновременно
- Создание посадочные страницы.

Важно отметить, что сервер MCP не задумывался как функция, доступная только «супер-администраторам». Цель инициативы — создать решение, которое будет простым в настройке, маломощным и доступным для широкого круга пользователей.

В процессе разработки точка входа Joomla (аналогично Site, Administrator, Api, Cli), которая будет работать с Streamable HTTP, необходимым для MCP. Аутентификация пока что предполагается на токенах, но затем планируется создание универсального OAuth-сервера для Joomla.
Фактические возможности MCP — инструменты, ресурсы и подсказки — реализованы в виде плагинов для обеспечения расширяемости. Таким образом ожидаем, что и сторонние разработчики смогут создавать MCP-плагины для внедрения поддержки своих расширений Joomla для работы с ИИ.

@joomlafeed

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

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

  • Глобальный модератор
  • 7288
  • 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

  • Глобальный модератор
  • 7288
  • 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

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 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

  • Гуру
  • 6913
  • 416 / 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

  • Гуру
  • 6913
  • 416 / 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

  • Гуру
  • 6913
  • 416 / 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

  • Гуру
  • 6913
  • 416 / 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

  • Гуру
  • 6913
  • 416 / 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

  • Гуру
  • 6913
  • 416 / 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

  • Гуру
  • 6913
  • 416 / 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

  • Живу я здесь
  • 3401
  • 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

  • Живу я здесь
  • 3401
  • 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
Просмотров: 1337
Последний ответ 01.11.2019, 17:42:04
от Septdir
[Решено] Создание контент плагина

Автор IvanTopor

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

Автор NeuroZ

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

Автор spirit1086

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

Автор vita1971

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