Новости 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 Ответов
  • 31847 Просмотров
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Создание папок из фронтенда
« Ответ #420 : 10.11.2015, 16:02:57 »
b2z, она сама это однозначно не сделает =)
Чуток поможем ;)

Код: php
// Выбираем ID
SELECT content_id
FROM #__chmos_compilations_articles
WHERE compilation_id = (int) $id

$contentIds = $db->loadColumn();

// Удаляем сборник
$table->delete($id);

// Подключаем модель
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_content/models', 'ContentModel');
$model = JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request' => true));

// Удаляем материалы
$model->delete($contentIds);

Ну а долелать запрос на выборку ID оставим в качестве домашнего задания  ^-^
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #421 : 10.11.2015, 19:22:11 »
b2z, спасибо за "чуток"! =)
----------------------------------

Мы так понимаем, нам нужно после
$model->delete($contentIds);

написать вот это:

SELECT id
FROM #__content
WHERE id = (int) $contentIds

$content = $db->loadColumn();
$content->delete;

-------------
Похоже на правду?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #422 : 10.11.2015, 19:47:00 »
Похоже на правду?
Нет, перед тем, как $contentIds использовать, ее  нужно получить.
Порядок не меняйте, только запрос нужно правильно составить.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #423 : 10.11.2015, 20:15:37 »
robert, подскажите, пожалуйста, что мы не так понимаем в запросе, который составил нам автор b2z?
----------------

SELECT content_id 
FROM #__chmos_compilations_articles
WHERE compilation_id = (int) $id
Это мы выбрали данные поля "content_id" из таблицы #__chmos_compilations_articles, которые соответствуют значению "compilation_id" равному id удаляемого сборника
-------------------------
$contentIds = $db->loadColumn(); - здесь данные, которые мы вызвали функцией SELECT, мы помещаем в переменную $contentIds и сохраняем результаты в специальный листок
------------------------
$table->delete($id); - удаляем сборник
------------------------
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_content/models', 'ContentModel');
$model = JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request' => true));
Здесь мы подключаем какую-то модель. И в переменную заключаем данные из этой модели. Что это такое, мы не поняли
------------------------
$model->delete($contentIds); - здесь мы удаляем данные из модели, которые соответствуют переменной $contentIds
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Создание папок из фронтенда
« Ответ #424 : 10.11.2015, 21:30:45 »
Все правильно поняли. Кроме:
Цитировать
$model->delete($contentIds); - здесь мы удаляем данные из модели, которые соответствуют переменной $contentIds

Вы удаляете не из модели, а из базы данных. $contentIds - это массив с ID материалов.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Создание папок из фронтенда
« Ответ #425 : 10.11.2015, 21:39:15 »
в целом, логика правильная
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #426 : 10.11.2015, 23:09:36 »
Логика правильная - это радует. =)

Цитировать
...перед тем, как $contentIds использовать, ее  нужно получить.

В этой строке $model->delete($contentIds); мы удаляем данные из базы, которые соответствуют переменной $contentIds

Вы говорите, что "перед тем, как $contentIds использовать, ее  нужно получить" (автор AlekVolsk).

Что-то мы запутались...

$db->setQuery($query);
$result = $db->loadObject();

Это как-то так делается?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Создание папок из фронтенда
« Ответ #427 : 10.11.2015, 23:17:51 »
Вы говорите, что "перед тем, как $contentIds использовать, ее  нужно получить" (автор AlekVolsk).
Это писал не я, а robert
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #428 : 10.11.2015, 23:29:35 »
Код: php-brief
// Выбираем ID
$db=JFactory::getDbo();
$query='SELECT content_id
FROM #__chmos_compilations_articles
WHERE compilation_id='.(int)$id;
$db->setQuery($query);
$contentIds=$db->loadColumn();

// Удаляем сборник
$table->delete($id);
 
// Подключаем модель
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR.'/components/com_content/models','ContentModel');
$model=JModelLegacy::getInstance('Article','ContentModel',array('ignore_request'=>true));
 
// Удаляем материалы
$model->delete($contentIds);
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #429 : 11.11.2015, 00:25:59 »
AlekVolsk, извините, пожалуйста. Перепутали.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #430 : 11.11.2015, 00:29:17 »
robert, мы вставили код в models/compilation.php в функцию public function delete($id).
Проверили. Сборник удаляется. Но материал, который в нём - нет (модуль списка произведений пользователя выводит материал).
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #431 : 11.11.2015, 00:33:10 »
Сделайте
Код: php-brief
print_r($contentIds);
и посмотрите, что выводится.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #432 : 11.11.2015, 00:34:34 »
... А мы ещё подумали, почему автор b2z написал функцию SELECT без обращения к базе данных? ...Подумали, что так надо. А, оказывается, это и был один из моментов, который нам нужно было доработать.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #433 : 11.11.2015, 00:41:39 »
robert, ничего не выводится....
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #434 : 11.11.2015, 00:50:19 »
robert, ничего не выводится....
Хм, а как $id объявляется? Сделайте
Код: php-brief
echo $id;
А вообще, приведите весь код.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #435 : 11.11.2015, 00:57:14 »
Вот код models/compilation.php:
Спойлер
[свернуть]
« Последнее редактирование: 11.11.2015, 01:01:24 от mila_serdnaya »
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #436 : 11.11.2015, 01:02:48 »
protected function canDelete($record) в коде выше лишняя.
---------
Вот код models/compilation.php, который у нас сейчас:
Спойлер
[свернуть]
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #437 : 11.11.2015, 01:06:34 »
Ни print_r($contentIds);, ни echo $id;, которые мы записали в файл вида default.php, никакие данные не выводят.


   
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #438 : 11.11.2015, 01:09:33 »
Вот файл default.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; // выражение осуществляет проверку, был ли файл, в котором оно записано, вызван из Joomla. Таким путем запрещается доступ к файлу извне, чтобы предотвратить взлом сайта.

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');
$saveOrder    = $listOrder == 'ordering';
$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');

print_r($contentIds);
echo $id;

 
?>
 


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

<table class="table table-bordered" id="compilationList">

<thead>
<tr>
<?php if (isset($this->items[0]->id)): ?>
<th>
<?php echo JText::_('COM_CHMOS_TITLE'); ?>
</th>
<?php endif; ?>
</tr>
</thead>







<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>
<?php if (isset($this->items[0]->state)): ?>
<?php $class = ($canEdit || $canChange)? 'active' : 'disabled'; ?>
<td>
<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>
<?php echo $this->escape($item->title); ?>
<?php endif; ?>
<?php if ($canEdit || $canDelete): ?>
<?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>

<tr>
<td>
<?php
foreach($item->articles as $article){
echo '<li><a href="'.JRoute::_('index.php?option=com_content&view=article&id='.$article->id).'">'.$article->title.'</a></li>';
};
?>
</td>
</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; ?>


<?php echo $this->pagination->getListFooter(); ?>


<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="filter_order" value="<?php echo $this->escape($this->state->get('list.ordering')); ?>" />
<input type="hidden" name="filter_order_Dir" value="<?php echo $this->escape($this->state->get('list.direction')); ?>" />

<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>
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #439 : 11.11.2015, 01:23:07 »
Ни print_r($contentIds);, ни echo $id;, которые мы записали в файл вида default.php, никакие данные не выводят.   
Вот файл default.php, который у нас сейчас есть:
Ну да, там ни того, ни другого нет.
Странно, вроде все нормально, кроме необъявленной $table, которая как раз сработала. Замените функцию delete():
Спойлер
[свернуть]
и проверьте, та ли таблица chmos_compilations_articles и те ли поля content_id и compilation_id в ней - я не читал вашу тему с начала.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #440 : 11.11.2015, 01:38:27 »
robert, да, таблицы правильные.
Функцию delete() заменили.
Всё равно print_r($contentIds); и echo $id; ничего не показывают.
Коме того, мы создали сборник, поместили в него материал, затем удалили созданный сборник - а материал не удалился. Модуль, выводящий список произведений автора всё равно его показывает.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #441 : 11.11.2015, 01:46:38 »
robert, мы пока что спать ещё не ложимся, поэтому Вы на нас не смотрите, пожалуйста.
Но если Вы никуда не торопитесь и хотите/можете уделить нам ещё какое-то время - мы только за. =)
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #442 : 11.11.2015, 02:11:28 »
Хм, вы не ту модель вызываете, что ли? А ну, удалите функцию delete($id) из models/compilation.php и попробуйте удалить какой-нибудь сборник.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #443 : 11.11.2015, 04:30:07 »
robert, сделали. Сборник удалили благополучно. Получается, что нам нужно в другую модель эту функцию засовывать?
У нас в папке models 3 php-файла:
compilationform.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;

/**
 * Chmos model.
 */
class ChmosModelCompilationForm extends JModelForm
{

var $_item = null;

/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @since    1.6
*/
protected function populateState()
{
$app = JFactory::getApplication('com_chmos');

// Load state from the request userState on edit or from the passed variable on default
if (JFactory::getApplication()->input->get('layout') == 'edit')
{
$id = JFactory::getApplication()->getUserState('com_chmos.edit.compilation.id');
}
else
{
$id = JFactory::getApplication()->input->get('id');
JFactory::getApplication()->setUserState('com_chmos.edit.compilation.id', $id);
}
$this->setState('compilation.id', $id);

// Load the parameters.
$params       = $app->getParams();
$params_array = $params->toArray();
if (isset($params_array['item_id']))
{
$this->setState('compilation.id', $params_array['item_id']);
}
$this->setState('params', $params);

}

/**
* Method to get an ojbect.
*
* @param    integer    The id of the object to get.
*
* @return    mixed    Object on success, false on failure.
*/
public function getData($id = null)
{
if ($this->_item === null)
{
$this->_item = false;

if (empty($id))
{
$id = $this->getState('compilation.id');
}

// Get a level row instance.
$table = $this->getTable();

// Attempt to load the row.
if ($table !== false && $table->load($id))
{

$user = JFactory::getUser();
$id   = $table->id;
if($id){
$canEdit = $user->authorise('core.edit', 'com_chmos.compilation.'.$id) || $user->authorise('core.create', 'com_chmos.compilation.'.$id);
}
else{
$canEdit = $user->authorise('core.edit', 'com_chmos') || $user->authorise('core.create', 'com_chmos');
}
if (!$canEdit && $user->authorise('core.edit.own', 'com_chmos.compilation.'.$id))
{
$canEdit = $user->id == $table->created_by;
}

if (!$canEdit)
{
throw new Exception(JText::_('JERROR_ALERTNOAUTHOR'), 500);
}

// Check published state.
if ($published = $this->getState('filter.published'))
{
if ($table->state != $published)
{
return $this->_item;
}
}

// Convert the JTable to a clean JObject.
$properties  = $table->getProperties(1);
$this->_item = JArrayHelper::toObject($properties, 'JObject');
}
}

return $this->_item;
}

public function getTable($type = 'Compilation', $prefix = 'ChmosTable', $config = array())
{
$this->addTablePath(JPATH_ADMINISTRATOR . '/components/com_chmos/tables');

return JTable::getInstance($type, $prefix, $config);
}

/**
* Method to check in an item.
*
* @param    integer        The id of the row to check out.
*
* @return    boolean        True on success, false on failure.
* @since    1.6
*/
public function checkin($id = null)
{
// Get the id.
$id = (!empty($id))? $id : (int) $this->getState('compilation.id');

if ($id)
{

// Initialise the table
$table = $this->getTable();

// Attempt to check the row in.
if (method_exists($table, 'checkin'))
{
if (!$table->checkin($id))
{
return false;
}
}
}

return true;
}

/**
* Method to check out an item for editing.
*
* @param    integer        The id of the row to check out.
*
* @return    boolean        True on success, false on failure.
* @since    1.6
*/
public function checkout($id = null)
{
// Get the user id.
$id = (!empty($id))? $id : (int) $this->getState('compilation.id');

if ($id)
{

// Initialise the table
$table = $this->getTable();

// Get the current user object.
$user = JFactory::getUser();

// Attempt to check the row out.
if (method_exists($table, 'checkout'))
{
if (!$table->checkout($user->get('id'), $id))
{
return false;
}
}
}

return true;
}

/**
* Method to get the profile form.
*
* The base form is loaded from XML
*
* @param    array   $data     An optional array of data for the form to interogate.
* @param    boolean $loadData True if the form is to load its own data (default case), false if not.
*
* @return    JForm    A JForm object on success, false on failure
* @since    1.6
*/
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_chmos.compilation', 'compilationform', array(
'control'   => 'jform',
'load_data' => $loadData
));
if (empty($form))
{
return false;
}

return $form;
}

/**
* Method to get the data that should be injected in the form.
*
* @return    mixed    The data for the form.
* @since    1.6
*/
protected function loadFormData()
{
$data = JFactory::getApplication()->getUserState('com_chmos.edit.compilation.data', array());
if (empty($data))
{
$data = $this->getData();
}


return $data;
}

/**
* Method to save the form data.
*
* @param    array        The form data.
*
* @return    mixed        The user id on success, false on failure.
* @since    1.6
*/
public function save($data)
{
$id    = (!empty($data['id']))? $data['id'] : (int) $this->getState('compilation.id');
$state = (!empty($data['state']))? 1 : 0;
$user  = JFactory::getUser();

if ($id)
{
//Check the user can edit this item
$authorised = $user->authorise('core.edit', 'com_chmos.compilation.'.$id) || $authorised = $user->authorise('core.edit.own', 'com_chmos.compilation.'.$id);
if ($user->authorise('core.edit.state', 'com_chmos.compilation.'.$id)!== true && $state == 1)
{ //The user cannot edit the state of the item.
$data['state'] = 0;
}
}
else
{
//Check the user can create new items in this section
$authorised = $user->authorise('core.create', 'com_chmos');
if ($user->authorise('core.edit.state', 'com_chmos.compilation.'.$id)!== true && $state == 1)
{ //The user cannot edit the state of the item.
$data['state'] = 0;
}
}

if ($authorised !== true)
{
throw new Exception(JText::_('JERROR_ALERTNOAUTHOR'), 403);
}

$table = $this->getTable();
if ($table->save($data) === true)
{
return $table->id;
}
else
{
return false;
}

}

public function delete($data)
{
$id = (!empty($data['id']))? $data['id'] : (int) $this->getState('compilation.id');
if (JFactory::getUser()->authorise('core.delete', 'com_chmos.compilation.'.$id)!== true)
{
throw new Exception(403, JText::_('JERROR_ALERTNOAUTHOR'));
}
$table = $this->getTable();
if ($table->delete($data['id']) === true)
{
return $id;
}
else
{
return false;
}
}

public function getCanSave()
{
$table = $this->getTable();

return $table !== false;
}
}

 compilations.php:
Спойлер
[свернуть]

 и compilation.php (функцию delete убрали)
Спойлер
[свернуть]

Мы эту функцию писали для compilation.php.
Но сборники удаляются после того, как мы из compilation.php эту функцию удаления убрали. Может быть, отгадка кроется в функции delete файла compilationform.php?
« Последнее редактирование: 11.11.2015, 04:33:39 от mila_serdnaya »
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #444 : 11.11.2015, 04:43:50 »
Ага. Кажется, robert, Вы были правы.
Мы только что удалили функцию delete из файла compilationform.php. Потом создали сборник, поместили в него произведение, нажали на удалить - а он не удаляется, возникает ошибка:Fatal error: Call to undefined method ChmosModelCompilationForm::delete() in Z:\home\starting\www\components\com_chmos\controllers\compilationform.php on line 209

Получается, нужно функцию delete, код которой Вы нам подправили, вставлять в файл compilationform.php?
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #445 : 11.11.2015, 04:51:48 »
Вот функция delete файла compilationform.php
Цитировать
Код
public function delete($data)
{



$id = (!empty($data['id']))? $data['id'] : (int) $this->getState('compilation.id');
if (JFactory::getUser()->authorise('core.delete', 'com_chmos.compilation.'.$id)!== true)
{
throw new Exception(403, JText::_('JERROR_ALERTNOAUTHOR'));
}
$table = $this->getTable();
if ($table->delete($data['id']) === true)
{
return $id;
}
else
{
return false;
}
}

Непонятно, функция delete нужна в файле compilation.php?
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #446 : 11.11.2015, 05:00:27 »
Мы попробовали изменить функция delete файла compilationform.php:
Цитировать
Код
public function delete($data)
{



$id = (!empty($data['id']))? $data['id'] : (int) $this->getState('compilation.id');
if (JFactory::getUser()->authorise('core.delete', 'com_chmos.compilation.'.$id)!== true)
{
throw new Exception(403, JText::_('JERROR_ALERTNOAUTHOR'));
}
$table = $this->getTable();
if ($table->delete($data['id']) === true)
{

$db=JFactory::getDbo();
$query='SELECT content_id
FROM #__chmos_compilations_articles
WHERE compilation_id='.(int)$id;
$db->setQuery($query);
$contentIds=$db->loadColumn();

JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR.'/components/com_content/models','ContentModel');
$model=JModelLegacy::getInstance('Article','ContentModel',array('ignore_request'=>true));
 
// Удаляем материалы
$model->delete($contentIds);
return $id;




}
else
{
return false;
}
}

Сборники удаляются, а материалы - нет...
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #447 : 11.11.2015, 08:58:22 »
Да, все выглядит правильно, не знаю, почему материалы не удаляются. Я не знаю всю структуру вашего компонента, но нашел в первых постах b2z его код. Сделайте проверку:
Измените функцию delete() в модели CompilationForm
Спойлер
[свернуть]
и функцию remove() в контроллере CompilationForm
Спойлер
[свернуть]
Удалите какой-нибудь непустой сборник и посмотрите, что выводится в сообщении.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Создание папок из фронтенда
« Ответ #448 : 11.11.2015, 10:14:07 »
Сначал сделайте выборку материалов из #__chmos_compilations_articles, а потом удаляйте сборник.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #449 : 11.11.2015, 17:49:00 »
robert, сделали, в сообщении выводится: "Item deleted successfullyIDs to remove: Model exists".
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Создание релиза компонента средствами 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