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

ArtPV

  • Осваиваюсь на форуме
  • 42
  • 3 / 0
  • Компания ArtPV.ru
Стоит Ads версии 2.2

Вопрос!!!
Поставил в настройках публикацию объявлений на 5 дней
Предупреждение по почте  об окончании срока публикации поставил за 2 дня
Прошло 6 дней
Предупреждение так и не пришло об окончании публикации
Объявление досих пор висит на доске, хотя должно было автоматом удалиться по истечении срока публикации!

В чем проблемма?
*

hel

  • Новичок
  • 4
  • 0 / 0
Стоит Ads версии 2.2

Вопрос!!!
Поставил в настройках публикацию объявлений на 5 дней
Предупреждение по почте  об окончании срока публикации поставил за 2 дня
Прошло 6 дней
Предупреждение так и не пришло об окончании публикации
Объявление досих пор висит на доске, хотя должно было автоматом удалиться по истечении срока публикации!

В чем проблемма?

Присоединяюсь к вопросу - date_recall прописывает как NULL.   Joomla 1.5.9    Версии adsmanager ставил разные - от 2.1.9 до 2.5
*

cor_ar

  • Захожу иногда
  • 137
  • 27 / 1
Да, ребята, надо разобраться - как то коряво єто работает...
у меня версия 2,1,9
в файле adsmanager.php есть функция function manage_expiration
я так понял ( если что поправте) она используется для вычисления времени ит.д
Думаю копать в ней надо. Какие есть предложения?
я не силен в запросах к бд и вообще в пхп
давайте коллективно решим трабл этот  ^-^
*

hel

  • Новичок
  • 4
  • 0 / 0
Отсоединяюсь от вопроса. Удалил мой adsmanager объявления  Т о у меня терпения не хватило :laugh:
Удалил, но осадок остался..   Че то мне теперь кажется, что он картинки от объявлений не поудалял..
*

Leech

  • Захожу иногда
  • 91
  • 21 / 0
  • НоворосМаркет
таже петрушка. плюс, я так понял, он берет емаил тот, кот был указан при подаче объявления. если зарегистрированый пользователь не указал емайл в форме подачи, то и предупреждение не придет. на официальном форуме не так много людей жалуются на эту проблему, может дело в настройках сервера???
*

Leech

  • Захожу иногда
  • 91
  • 21 / 0
  • НоворосМаркет
Присоединяюсь к вопросу - date_recall прописывает как NULL.   Joomla 1.5.9    Версии adsmanager ставил разные - от 2.1.9 до 2.5

а date_recall похоже не используется вовсе. высчитывается дельта, потом recall_time и пошел запрос на все объявы старше этого recall_time.

Код
$delta = $conf->ad_duration - 1 + $conf->recall_time;  
$recall_time = date("Ymd",mktime()-($delta*24*3600));
$database->setQuery( "SELECT id,email,ad_headline FROM #__adsmanager_ads WHERE date_created < $recall_time AND recall_mail_sent = 0");

есть еще recall_mail_sent - отсылалось ли уведомление пользователю. у меня емайл стоит необязательным и, как правило, остается незаполненным. далее по коду вызывается sendEmail. видимо из-за того, что емайл поле пустое, ничего не происходит. раньше думал, что если пользователь зарегистрирован, то ему на регистрационный емайл будет прилетать. ан нет, используется емайл указанный в при подаче обявления. нет емайла - нет предупреждения
*

maxpa

  • Захожу иногда
  • 67
  • 2 / 0
Ну как господа кто нибудь решил проблему с автоудалением
у меня AdsManager Version 2.5  и тоже не пашет.
хоть другой скрипт переставляй
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
стоит Joomla 1.5.10 и AdsManager 2.1.9
Удаление, работает (неправильно!, если отмечено уведомлять по E-mail), рисунки тоже не хотел удалять!!!

Вся проблема была из-за ошибкок допущенных в функции manage_expiration, код которой целиком я выложил ниже... кому надо прикрепляю файл adsmanager.php.
- решена проблема с удалением картинок;
- во время удаляются сообщения при отмеченном уведомлении по E-mail
- как часики работает уведомление ^-^

Пару слов о том как работает удаление просроченных объявлений: текущая дата записывается в переменную $last_cron_date (она хранится в фале cron.php),так сделано что функция manage_expiration, которая отвечает за удаление просроченных объявлений будет запускаться только один раз в день при первом посищении сайта (грамотно!!!)
Для тех кто будет эксперементировать с работоспособностью функции, просто переводите дату на системных часах!!!
Код
if ($last_cron_date != date("Ymd"))  	
manage_expiration($option);


Код
function manage_expiration($option){
global $database,$mosConfig_absolute_path;

// get configuration
$database->setQuery( "SELECT * FROM #__adsmanager_config");
$database->loadObject($conf);
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

if ($conf->expiration == 1)
{
if ($conf->recall == 1)
{
$delta = $conf->ad_duration - 1 - $conf->recall_time; 
$recall_time = date("Ymd",mktime()-($delta*24*3600));
$database->setQuery( "SELECT id,email,ad_headline FROM #__adsmanager_ads WHERE date_created < $recall_time AND recall_mail_sent = 0");
$ads = $database->loadObjectList();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}
if(isset($ads))
{
foreach($ads as $ad)
{
sendEmail($ad,$conf,$option);

}
}
$database->setQuery( "UPDATE #__adsmanager_ads SET recall_mail_sent = 1,date_recall = CURDATE() WHERE date_created < $recall_time AND recall_mail_sent = 0");
$database->query();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

$delta = $conf->recall_time - 1; 
$expiration_date = date("Ymd",mktime()-($delta*24*3600));

//echo "DELETE FROM #__adsmanager_ads WHERE recall_mail_sent = 1 AND date_recall < $expiration_date";
$database->setQuery( "SELECT id FROM #__adsmanager_ads WHERE recall_mail_sent = 1 AND date_recall < $expiration_date");
    $pic_id = $database->loadResultArray();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

$database->setQuery( "DELETE FROM #__adsmanager_ads WHERE recall_mail_sent = 1 AND date_recall < $expiration_date");
$database->query();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}
//
foreach($pic_id as $ad)
{
$nbImages = $conf->nb_images;
for($i = 1 ;$i < $nbImages + 1; $i++)
{
$ext_name = chr(ord('a')+$i-1);
$pict = $mosConfig_absolute_path."/images/com_adsmanager/ads/".$ad.$ext_name."_t.jpg";
if ( file_exists( $pict)) {
unlink( $pict);
}
$pic = $mosConfig_absolute_path."/images/com_adsmanager/ads/".$ad.$ext_name.".jpg";
if ( file_exists( $pic)) {
unlink( $pic);
}
}}
//
}
else
{
////
$delta = $conf->ad_duration - 1; 
$expiration_date = date("Ymd",mktime()-($delta*24*3600));

        $database->setQuery( "SELECT  id FROM #__adsmanager_ads WHERE date_created < $expiration_date");
$pic_id = $database->loadResultArray();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

foreach($pic_id as $ad)
{
   
$nbImages = $conf->nb_images;

for($i = 1 ;$i < $nbImages + 1; $i++)
{
$ext_name = chr(ord('a')+$i-1);
$pict = $mosConfig_absolute_path."/images/com_adsmanager/ads/".$ad.$ext_name."_t.jpg";
if ( file_exists( $pict)) {
unlink( $pict);
}
$pic = $mosConfig_absolute_path."/images/com_adsmanager/ads/".$ad.$ext_name.".jpg";
if ( file_exists( $pic)) {
unlink( $pic);
}
}
     }

/////

$database->setQuery( "DELETE FROM #__adsmanager_ads WHERE date_created < $expiration_date");
$database->query();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}
}
}

$last_cron_date = date("Ymd");
$Fnm = $mosConfig_absolute_path .'/components/'.$option.'/cron.php';
    $inF = fopen($Fnm,"w");
fwrite($inF,'<?php $last_cron_date='.$last_cron_date.';?>');
fclose($inF);
}

[вложение удалено Администратором]
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
Чуть не забыл))) еще один совет! Для тех кто хочет что бы зарегестрированным пользователям приходило уведомление на мыло указанное при регистрации и его нельзя было изменить можно просто скрыть это поле! для тех кто не хочет дальше могут не читать.... ;)

для этого в файле adsmanager.html.php находим строчку case 'emailaddress': (их найдется несколько, аш 3), там где будут поля input (это самая нижняя из найденных) меняем type='text' на type='hidden' - делаем поле невидимым! в фалле lang_russian.php ищем строчку с фразой ADSMANAGER_FORM_EMAIL и приводим её к следующему виду:
Код
DEFINE ( "ADSMANAGER_FORM_EMAIL", "");
« Последнее редактирование: 23.08.2009, 02:32:13 от Kikasso »
*

vidima

  • Осваиваюсь на форуме
  • 19
  • 3 / 0
Спасибо Kikasso  :D

Я твой код вставил, проверил (кроме почты), все гут. 
Вот файл к adsmanager 2.2.2 - с исправлениями от  Kikasso.
Есчё раз тебе спасибо.

[вложение удалено Администратором]
*

maxpa

  • Захожу иногда
  • 67
  • 2 / 0
У меня с твоим куском кода тоже все работает.Дни прошли сообщение удалилось
Вроде все ок
Как плюс в репу поставить так и не нашел
Огромное спасибо
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
один раз в день при первом посищении сайта

Посещении сайта кем? =O
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
любым пользователем... который обратится к компоненту com_adsmanager
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
Выдает ошибку:
Parse error: syntax error, unexpected $end in ...../components/com_adsmanager/adsmanager.php on line 2459

$end - это че за переменная?
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
а что у тебя за версия Ads Manager ? Такой переменной не должно быть...
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
а что у тебя за версия Ads Manager ? Такой переменной не должно быть...

АМ 2,5,0

Твоим кодом заменил функцию, стал выдавать это сообщение. а номер строки - конец файла :(

переменная есть в admin.adsmanager.php    $end = strlen($data);

и еще 4 раза там же используется
« Последнее редактирование: 17.01.2010, 18:11:02 от Timoshkin »
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
В 2,5 удаление объявлений работает корректно (на сколько я помню), моё "лекарство" было написано для 2,1,9
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
У меня не работает :( изменил дату на сегодня - объявление не удалилось.
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
в настройках всё включено? где дату менял?
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
через базу сменил, а мож дату вчерашнюю надо сделать?

Изменил - не удалилось.
в базе:
recall_mail_sent=1
published=1
expiration_date=2010-01-16
« Последнее редактирование: 17.01.2010, 18:33:08 от Timoshkin »
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
функция удаления не смотрит на expiration_date она вычисляет дату удаления исходя из date_created + срок публикации, надо в базе уменьшать дату публикации! (для 2,5 могу ошибаться)
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
функция удаления не смотрит на expiration_date она вычисляет дату удаления исходя из date_created + срок публикации, надо в базе уменьшать дату публикации! (для 2,5 могу ошибаться)

Изменил date_created на месяц назад, срок публикации (ad_duration) - 30 дн, результата нет.



Не срабатывает date_recall = CURDATE()

$database->setQuery( "UPDATE #__adsmanager_ads SET recall_mail_sent = 1,date_recall = CURDATE() WHERE date_created < $recall_time AND recall_mail_sent = 0");

date_recall=NULL че за фигня?

и мыло не приходит
« Последнее редактирование: 17.01.2010, 19:48:51 от Timoshkin »
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
А че SQL Server может сравнивать типы Дата и Интежер? date_created < $recall_time
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
Для чего используется date_recall?
*

Kikasso

  • Захожу иногда
  • 99
  • 45 / 0
date_recall - дата отправки уведомления
recall_mail_sent (0,1) - 1 если письмо уведомления отправлено
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
date_recall - дата отправки уведомления
recall_mail_sent (0,1) - 1 если письмо уведомления отправлено


Отправку письма сделал - работает. Пришлось некоторые команды в запросе заменить (Версия MySQL:  5.0.87-community)  и явные значения нуно выделять '. Не удаляет объявления хотя должен, по идее.
код отвечающий за удаление:
Код: php
$database->setQuery( "SELECT id FROM #__adsmanager_ads WHERE recall_mail_sent = '1' AND expiration_date < CURDATE()");
$idsarray = $database->loadResultArray();
if(isset($idsarray) && count($idsarray) > 0){
foreach($idsarray as $adid)
{
remove_ad($adid,$conf,$plugins);
}
}

Может он не все параметры передаёт функции remove_ad? Может переменные объявить типа как Public?

« Последнее редактирование: 18.01.2010, 02:57:19 от Timoshkin »
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
Проверил! Вставил код из функции remove_ad и все заработало! Почему-то не передается переменная $adid из manage_expiration в remove_ad  :o

Код: php
			$database->setQuery( "SELECT id FROM #__adsmanager_ads WHERE expiration_date < CURDATE()");
$idsarray = $database->loadResultArray();
if(isset($idsarray) && count($idsarray) > 0){
foreach($idsarray as $adid)
{
$database->setQuery("SELECT * FROM #__adsmanager_ads WHERE id=$adid");
$database->loadObject($ad);
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

$database->setQuery("DELETE FROM #__adsmanager_ads WHERE id=$adid");
if ($database->getErrorNum()) {
echo $database->stderr();
} else {
$database->query();
}

$database->setQuery("DELETE FROM #__adsmanager_adcat WHERE adid=$adid");
if ($database->getErrorNum()) {
echo $database->stderr();
} else {
$database->query();
}

$database->setQuery( "SELECT name FROM #__adsmanager_fields WHERE `type` = 'file'");
$file_fields = $database->loadObjectList();
foreach($file_fields as $file_field)
{
$filename = "\$ad->".$file_field->name;
eval("\$filename = \"$filename\";");
@unlink($mosConfig_absolute_path."/images/com_adsmanager/files/".$filename);
}

$nbImages = $conf->nb_images;

for($i = 1 ;$i < $nbImages + 1; $i++)
{
$ext_name = chr(ord('a')+$i-1);
$pict = $mosConfig_absolute_path."/images/com_adsmanager/ads/".$adid.$ext_name."_t.jpg";
if ( file_exists( $pict)) {
unlink( $pict);
}
$pic = $mosConfig_absolute_path."/images/com_adsmanager/ads/".$adid.$ext_name.".jpg";
if ( file_exists( $pic)) {
unlink( $pic);
}
}

foreach($plugins as $plugin)
{
$plugin->onDelete(0,$adid);
}

if (function_exists('deletePaidAd')){
deletePaidAd($adid);
}

}

Как сделать, чтобы значение переменной из функции в функцию передавалось?
*

Timoshkin

  • Захожу иногда
  • 55
  • 7 / 0
$ad используется в remove_ad для заполнения значениями из таблицы, далее поля используются для удаления приаттаченных файлов. А строки удаляются через запрос SQL - DELETE.

Все работает. Забыл про файл Cron.php где записывается дата обращения к таблице, соответственно второй раз запрос не выполняется.

Все оказалось просто..

Timoshkin можешь выложить файлик adsmanager.php, буду очень благодарен!

Все вопрос решон)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор efimov777

Ответов: 6
Просмотров: 5549
Последний ответ 12.04.2020, 07:25:59
от Pavel
Хочу уточнить, есть в AdsManager возможность загрузки объявлений с парсера?

Автор DomBeri

Ответов: 3
Просмотров: 9511
Последний ответ 28.03.2019, 17:20:10
от DomBeri
Удалить карту объявлений Google

Автор trel

Ответов: 7
Просмотров: 3840
Последний ответ 25.03.2019, 09:02:25
от Technic
Вывод объявлений в случайном порядке

Автор Sabotage

Ответов: 3
Просмотров: 1673
Последний ответ 28.09.2018, 14:21:05
от Sabotage
Поля в списке объявлений

Автор klekovkinandrey

Ответов: 0
Просмотров: 1407
Последний ответ 17.01.2018, 10:18:34
от klekovkinandrey