Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

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

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

Автор IvanTopor

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

Автор NeuroZ

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

Автор spirit1086

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

Автор vita1971

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