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

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

  • Легенда
  • 11026
  • 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

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

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