Новости Joomla

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

👩‍💻 Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1. Это релиз, в который включены уже проверенные изменения, но ещё очень многие исправления и улучшения ждут своей очереди. Joomla следит за качеством и безопасностью своего кода и каждое изменение должно быть успешно протестировано как минимум ещё двумя участниками сообщества. Разработка Joomla ведётся на платформе GitHub.Филипп Уолтон (Philip Walton) - один из разработчиков, кто активно вносит свой вклад в ядро Joomla. Он уже несколько месяцев посвящает свои послеполуденные часы пятницы работе с Joomla и предлагает присоединиться к нему. 📆 Пятница, 30 мая 2025, с 15:00 до 17:00 по UTC (Лондон) - с 18:00 до 20:00 по Москве.В чате Google Meet Филипп готов помочь с тестированием тем, кто будет делать это в первый раз. А так же он подготовил список лёгких Pull Request, которые можно протестировать довольно быстро. Чем больше тестов будет проведено сейчас, тем меньше ошибок вылезет потом. На данный момент 148 (уже 147 на момент написания заметки) PR на GitHub Joomla ждут тестирования.👩‍💻 Open to all. All together.Также вам поможет сделать первые шаги это видео.GitHub JoomlaДа, это вечер пятницы. Но тестирование занимает порой минут 15, а доброе дело сделано. Просто убедитесь, что разработчик чего-то не пропустил и всё работает как ожидается.#joomla #joomla6 #community

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

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #450 : 11.11.2015, 18:25:45 »
b2z, вы пишите:
Цитировать
Сначала сделайте выборку материалов из #__chmos_compilations_articles

Код
// Выбираем ID
$db=JFactory::getDbo();
$query=$db->getQuery(true);
$query->select->quoteName('content_id');
$query->from($db->quoteName('#__chmos_compilations_articles'));
$query->where($db->quoteName('compilation_id').'='.$id);
$db->setQuery($query);
$contentIds=$db->loadColumn();

Мы так понимаем, что это и есть выборка из таблицы #__chmos_compilations_articles.
------------------------------------------
Цитировать
а потом удаляйте сборник.

Код
// Удаляем сборник
$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: Создание папок из фронтенда
« Ответ #451 : 11.11.2015, 18:27:57 »
Может быть, кто-то из форумчан, которые просматривают сейчас тему - знают, в чём мы допустили ошибку?
Автор Voland, например? =)
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #452 : 11.11.2015, 19:00:42 »
robert, сделали, в сообщении выводится: "Item deleted successfullyIDs to remove: Model exists".
Значит, проблема в выборке: я на улице, посмотрю, когда приеду.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Создание папок из фронтенда
« Ответ #453 : 11.11.2015, 19:05:08 »
Может быть, кто-то из форумчан, которые просматривают сейчас тему - знают, в чём мы допустили ошибку?
Автор Voland, например? =)
я не слежу за кодом, а работаю в IDE обычно - надо прочитать страниц 5 назад, вникнуть о чем речь, еще и самого кода, как я понял нет ни на гитхабе, нигде..
Проще было б написать один раз за полдня, чем тратить недели.
Извините, мой логический склад ума не позволяет мне плодить энтропию.
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #454 : 11.11.2015, 22:14:53 »
voland, если вдруг Вы в свой выходной захотите по каким-то причинам выбрать время и помочь нам, - мы будем только рады.
Код отдельно мы никуда не выкладывали, потому что он постоянно видоизменяется.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #455 : 11.11.2015, 22:25:14 »
Проверьте еще раз, точно у вас есть таблица chmos_compilations_articles? Если да, то какие столбцы там есть? И сейчас там есть какие-нибудь записи?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Re: Создание папок из фронтенда
« Ответ #456 : 11.11.2015, 22:34:03 »
Проверьте еще раз, точно у вас есть таблица chmos_compilations_articles? Если да, то какие столбцы там есть? И сейчас там есть какие-нибудь записи?

Код: sql
CREATE TABLE IF NOT EXISTS `#__chmos_compilations_articles` (
  `compilation_id` int(11) UNSIGNED NOT NULL,
  `content_id` INT(10) UNSIGNED,
  PRIMARY KEY (`compilation_id`, `content_id`),
  CONSTRAINT `#__chmos_compilations_articles_fk_compilation_id`
  FOREIGN KEY (`compilation_id`)
  REFERENCES `#__chmos_compilations` (`id`)
    ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;

Здесь я делал внешний ключ, чтобы при удалении сбрника автоматически удалялись связи. Поэтому сначала надо делать выборку материалов из этой таблицы, а потом удалять сборник. Если делать наоборот, то в этой таблице уже не будет связанных с удаленным сборником материалов.
*

b2z

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

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #458 : 11.11.2015, 22:41:06 »
robert, таблица  chmos_compilations_articles точно есть.
Автор b2z написал её структуру.
Прикрепляем скрин с записями в этой таблице:
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #459 : 11.11.2015, 22:46:26 »
Нифига себе, вы новичку сразу подсунули FOREIGN KEY? Но выборка вроде осуществляется перед удалением, если я правильно помню.

P.S. Еще и CONSTRAINT.
« Последнее редактирование: 11.11.2015, 22:55:31 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #460 : 11.11.2015, 22:46:41 »
b2z, текущий код метода delete в файле compilationform.php такой:
Спойлер
[свернуть]
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #461 : 11.11.2015, 22:50:08 »
Да, выборка идет после удаления. Временный код для проверки удалите.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #462 : 11.11.2015, 22:58:27 »
robert, временный код удалили
Вот строки этого временного кода (вроде бы ничего не забыли):
$return[]=$id;
$return[]='IDs to remove: '.implode(',',$contentIds);
if($model){
$return[]='Model exists.';
}
return $return;
--------------
Вот метод delete файла compilationform.php, который имеем сейчас:
Спойлер
[свернуть]
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Создание папок из фронтенда
« Ответ #463 : 11.11.2015, 23:03:01 »
Нифига себе, вы новичку сразу подсунули FOREIGN KEY? Но выборка вроде осуществляется перед удалением, если я правильно помню.

P.S. Еще и CONSTRAINT.
Я предсказывал эти проблемы. b2z, напишите ей нормально полностью функцию удаления, а то топик грозит побить мой рекорд (помните разработку импорта XML? на 505 постов...)
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #464 : 11.11.2015, 23:03:25 »
Цитировать
Да, выборка идет после удаления

Значит, нам нужно select на первое место поставить?
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #465 : 11.11.2015, 23:24:27 »
Может быть, как-то так?
Цитировать
Код
public function delete($data)
{
// Выбираем ID
$db=JFactory::getDbo();
$query='SELECT content_id
FROM #__chmos_compilations_articles
WHERE compilation_id='.(int)$id;
$db->setQuery($query);
$contentIds=$db->loadColumn();


$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();
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_content/models', 'ContentModel');
       $model = JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request' => true));


if ($table->delete($data['id']) === true)
{
$return=array();
$model->delete($contentIds);
}
else
{
return false;
}
}
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #466 : 11.11.2015, 23:42:58 »
mila_serdnaya, верните функции delete() старый код, потом добавьте выборку IDs с учетом подсказок. Сейчас у вас не совсем правильно:
- функция при успешном исполнении ничего не возвращает
- переменная $id в запросе нигде не объявлена
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #467 : 11.11.2015, 23:50:02 »
robert, возвращаем функции delete() старый код:
Спойлер
[свернуть]

*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #468 : 11.11.2015, 23:52:31 »
Цитировать
добавьте выборку IDs с учетом подсказок

Подсказка - это то, что наше обращение к таблице chmos_compilations_articles должно произойти перед тем, как мы удалим сборник?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #469 : 12.11.2015, 00:04:35 »
Да.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #470 : 12.11.2015, 00:36:38 »
robert, пробуем разобраться с кодом.

public function delete($data)
{
$id = (!empty($data['id']))? $data['id'] : (int) $this->getState('compilation.id'); - здесь мы в переменную получаем id удаляемого сборника
if (JFactory::getUser()->authorise('core.delete', 'com_chmos.compilation.'.$id)!== true) -здесь мы говорим, что если пользователь неавторизован...
{
throw new Exception(403, JText::_('JERROR_ALERTNOAUTHOR')); - ...то мы выводим ошибку
}

Затем получаем ID материалов, которые связаны с удаляемым сборником:

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

...пока правильно?



« Последнее редактирование: 12.11.2015, 00:42:22 от mila_serdnaya »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #471 : 12.11.2015, 00:44:16 »
Да, правильно.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #472 : 12.11.2015, 00:56:50 »
Уже что-то. =)
---------------
После того, как мы получили ID материалов, которые связаны с удаляемым сборником, можно удалять сборник.
Продолжаем код:

$table = $this->getTable(); - в переменную получаем данные из таблицы
if ($table->delete($data['id']) === true) - если таблицу удаляем, то...
{
$return=array(); - ...получаем результат
}

else - если не удаляем
{
return false; - то ничего не возвращаем.
}
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #473 : 12.11.2015, 00:58:57 »
Нам нужно куда-то вставить подключение к модели и само удаление материалов.


*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #474 : 12.11.2015, 01:02:20 »
Мы думаем так:
Сначала подключаем модель
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR.'/components/com_content/models','ContentModel');
$model=JModelLegacy::getInstance('Article','ContentModel',array('ignore_request'=>true));

Потом обращаемся к таблице
$table = $this->getTable();

if ($table->delete($data['id']) === true) - если таблицу удаляем, то...
{
$model->delete($contentIds); - удаляем материалы тоже
$return=array(); - ...получаем результат
}
else - если не удаляем
{
return false; - то ничего не возвращаем.
}

....Правильно мы закончили код? Или опять напартачили со строкой удаления материалов?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #475 : 12.11.2015, 01:07:20 »
Вы вернули не первоначальный код модели. $return=array(); там не должно быть.
в переменную получаем данные из экземпляр объекта таблицы
если таблицу нужный сборник успешно удален удаляем, то...
удаляем и материалы
...получаем результат на самом деле не получали, хотя должны были получить $id
если не удаляем удалось удалить
то ничего не возвращаем ложь.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #476 : 12.11.2015, 01:18:29 »
Прочитали мы то, что Вы нам позачёркивали - улыбнулись.)
Правим код с учётом Ваших замечаний.
----------------
в переменную получаем экземпляр объекта таблицы
$table = $this->getTable();

если  нужный сборник успешно удален, то...
if ($table->delete($data['id']) === true)

{
$model->delete($contentIds);  удаляем и материалы
здесь мы должны получить $id
}
else если не удалось удалить
{
return false; - возвращаем ложь
}
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #477 : 12.11.2015, 01:23:34 »
Не совсем мы понимаем, что эта за переменная $id. Это id удаляемого сборника? Мы же вроде как в самом начале функции её получали:
$id = (!empty($data['id']))? $data['id'] : (int) $this->getState('compilation.id');
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание папок из фронтенда
« Ответ #478 : 12.11.2015, 01:25:32 »
Не совсем мы понимаем, что эта за переменная $id.
Ладно,
Код: php-brief
return $id;
В принципе все нормально. Модель ContentModelArticle лучше подключить прямо перед удалением материалов, чтобы не выполнять лишний код в случае неудачи.
Все, я иду спать.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

mila_serdnaya

  • Захожу иногда
  • 432
  • 3 / 0
Re: Создание папок из фронтенда
« Ответ #479 : 12.11.2015, 01:31:07 »
robert, спасибо Вам огромное. За терпение особенно.  
Спокойной Вам ночи и самых-самых хороших снов!
------
А мы сейчас всё подправим и пойдём тестировать. Надеемся, всё получится.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор SkyAn

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

Автор IvanTopor

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

Автор NeuroZ

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

Автор spirit1086

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

Автор vita1971

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