Новости 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 Гость просматривают эту тему.
  • 0 Ответов
  • 946 Просмотров
*

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Как-то было делать нечего и я решил исправить ту вопиющую несправедливость, которая возникла с дружбой AdsManager и JomSocial. C CommunityBuilder дружит нативно, а с JomSocial нет. Казалось бы, что сложного брать поля из JS так же как из CB? Но на самом деле все упирается в то, что поля AdsManager изначально были построены по архитектуре поле CommunityBuilder - они имеют совершенно одинаковые таблицы! Засада, но мы не унываем и планомерно дорабатываем штатные функции до рабочего состояния.
Полную работоспособность данного решения я не гарантирую, но максимальную подгонку обещать могу.

Итак, дано: JomSoical 4.2.5 и AdsManager 3.1.6 Gold.

Что нам нужно?
- Чтобы вот тут в бекенде:

И на фронтенде соответственно брались нужные значения из указанных полей JS.

Делаем следующие:
1. берем файл \components\com_adsmanager\views\edit\view.html.php
и в строке, где берутся доп.поля профиля из CB мы берем поля из профиля JS новой функцией getJSProfile по аналогии с getCBProfile
Код
if ($conf->comprofiler == 0) {	
$profile = $usermodel->getProfile($user->id);
} else {
if (COMMUNITY_BUILDER == 1) {
$profile = $usermodel->getCBProfile($user->id);
}
if (JOMSICAL == 1) {
$profile = $usermodel->getJSProfile($user->id);
} else {
$profile = new stdClass();
}
}

2. Создаем новую функцию  getJSProfile рядом с getCBProfile в \administrator\components\com_adsmanager\models\user.php
Код
function getJSProfile($userid) {
$this->_db->setQuery("SELECT u.name AS name, u.email as email FROM #__users AS u WHERE u.id=".(int)$userid);
$user = $this->_db->loadObject();
$this->_db->setQuery("SELECT fv.value AS value, f.name AS cbname FROM d44qz_adsmanager_fields AS f LEFT JOIN d44qz_community_fields_values AS fv ON f.cb_field = fv.field_id WHERE f.cb_field !='-1' AND f.published = 1 AND fv.user_id =".(int)$userid);
$rows = $this->_db->loadObjectList();
$new = array();

foreach ($rows as $row) {
$new[$row->cbname] = $row->value;
}

$user = (object)(array_merge((array)$user, $new));

return $user;
}

3. в файле \administrator\components\com_adsmanager\models\content.php
находим getContents и дописываем условие для JS
Код
function getContents($filters = null,$limitstart=null,$limit=null,$filter_order=null,$filter_order_Dir=null,$admin=0,$favorite=0) {
$sql = "SELECT a.*, p.name as parent, p.id as parentid, c.name as cat, c.id as catid,u.username as user,u.name as fullname ".
" FROM #__adsmanager_ads as a ".
" INNER JOIN #__adsmanager_adcat as adcat ON adcat.adid = a.id ";
if (COMMUNITY_BUILDER == 1)
$sql .= " LEFT JOIN #__comprofiler as cb ON cb.user_id = a.userid ";
if (JOMSOCIAL == 1)
$sql .= " LEFT JOIN #__community_users as cb ON cb.userid = a.userid ";
$sql .= " LEFT JOIN #__users as u ON a.userid = u.id ".
" INNER JOIN #__adsmanager_categories as c ON adcat.catid = c.id ".
" LEFT JOIN #__adsmanager_categories as p ON c.parent = p.id ";
не помню зачем эта функция и работает ли она в моем случае специально не проверял)))) но, по логике должна...

4. \administrator\components\com_adsmanager\views\admin\view.html.php
Эта функция нужна для того, что в админке правильные поля выводились. В районе 811 строки находим получение значений функцией getAllCbFields() и дописываем условия
Код
$cb_fields = $fieldmodel->getAllCbFields();
$cbfields[] = JHTML::_('select.option', '-1', JText::_('ADSMANAGER_NOT_USED') );
if (isset($cb_fields))
{
foreach($cb_fields as $cb)
{
if (COMMUNITY_BUILDER == 1)
$cbfields[] = JHTML::_('select.option', $cb->fieldid, "(".$cb->fieldid.") ".$cb->name );
if (JOMSOCIAL == 1)
$cbfields[] = JHTML::_('select.option', $cb->id, "(".$cb->id.") ".$cb->name );
}
}
тут можно было, конечно, просто исправить функцию getAllCbFields(), чтобы она сразу отдавала базу с fieldid, а не id, но поздно дошло, а уже лень. Да и так проще понять как это всё работает:)

так же там есть в районе 461 строки кусок кода, которые получает значения полей
Код
foreach($fields as $field) {
if ($field->cbfieldvalues != "-1")
{
/*get CB value fields */
$cbfieldvalues = $fieldmodel->getCBFieldValues($field->cbfieldvalues);
$field_values[$field->fieldid] = $cbfieldvalues;
}
}
но его мы не правим. Просто любуемся и понимаем, что нужно менять ещё и getCBFieldValues();

5. вздыхаем и идём в \administrator\components\com_adsmanager\models\field.php
около 522 строки видим и правим вышеуказанные функции getAllCbFields() и getCBFieldValues()
Код
function getAllCbFields() {
$config = JFactory::getConfig();
$dbprefix = JOOMLA_J3 ? $config->get('dbprefix') : $config->getValue('config.dbprefix');

if (COMMUNITY_BUILDER == 1)
$this->_db->setQuery("SHOW TABLES LIKE '".$dbprefix."comprofiler_fields'"  );
if (JOMSOCIAL == 1)
$this->_db->setQuery("SHOW TABLES LIKE '".$dbprefix."community_fields'"  );
$tables = $this->_db-> loadObjectList();
if (count($tables) > 0) {
if (COMMUNITY_BUILDER == 1)
$this->_db->setQuery("SELECT * FROM #__comprofiler_fields WHERE 1"  );
if (JOMSOCIAL == 1)
$this->_db->setQuery("SELECT * FROM #__community_fields WHERE fieldcode !='' "  );
$cb_fields = $this->_db-> loadObjectList();
return $cb_fields;
}
else
return array();
}

Код
	function getCBFieldValues($fieldcbid) {
if (JOMSOCIAL == 1) {
$this->_db->setQuery( "SELECT * FROM #__community_fields WHERE id = ".(int)$fieldcbid." ORDER by ordering ");
$index = $this->_db->loadObject();
$values = explode("\n", $index->options);

$cbfieldvalues = array();
foreach ($values as $key => $val) {
$cbfieldvalues[$key] = new stdClass();
$cbfieldvalues[$key]->fieldvalueid = $key;
$cbfieldvalues[$key]->fieldid = $index->id;
$cbfieldvalues[$key]->fieldtitle = $val;
$cbfieldvalues[$key]->fieldlabel = '';
$cbfieldvalues[$key]->ordering = $key;
$cbfieldvalues[$key]->sys = 0;
$cbfieldvalues[$key]->fieldvalue = $val;
}
return $cbfieldvalues;
}
if (COMMUNITY_BUILDER == 1) {
$this->_db->setQuery( "SELECT *, fieldtitle as fieldvalue FROM #__comprofiler_field_values WHERE fieldid = ".(int)$fieldcbid." ORDER by ordering ");
$cbfieldvalues = $this->_db->loadObjectList();
return $cbfieldvalues;
}
}

а так же в районе строки 267 разглядываем функцию getFieldValues которой требуется getCBFieldValues(), но не трогаем. Так как и так всё хорошо:)


У меня в итоге из JS берется откуда надо и вставляется куда надо все поля по аналогии с CB.

Самая фигня состоит в том, что у таблиц полей JS и СB cовершенно разная архитектура. И если у значения поля CB есть и fieldtitle и fieldvalueid и ordering, тот в полях JS ничего этого нет. Поэтому в функции getCBFieldValues их проходится просто эмулировать:) Что совершенно не сказывается на работоспособности.
В функции getJSProfile же получится совершенно дикий запрос сразу к трем таблица, вместо двух последовательных к CB да и потом функция разворота массива не добавляет  красоты. Кто знает, как сделать это проще - прошу в комментарии
« Последнее редактирование: 11.11.2016, 21:06:49 от moonaway »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Заглушки с http://placehold.it вместо картинок в списке объявлений

Автор efimov777

Ответов: 6
Просмотров: 5555
Последний ответ 12.04.2020, 07:25:59
от Pavel
Вывод картинки поля "radioimage"

Автор Pavel

Ответов: 7
Просмотров: 3753
Последний ответ 12.03.2019, 16:23:10
от Pavel
Не выводятся поля при просмотре с телефона

Автор Den85

Ответов: 0
Просмотров: 1712
Последний ответ 16.01.2019, 15:17:05
от Den85
Как вытащить id значения поля?

Автор Fetka

Ответов: 9
Просмотров: 1656
Последний ответ 20.02.2018, 15:41:55
от effrit
Как в Adsmanager'е выделить цветом объявление с определенным значением поля?

Автор Fetka

Ответов: 1
Просмотров: 16258
Последний ответ 20.02.2018, 00:30:44
от Fetka