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

Ahmad

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Quickdown в новом окне
« : 13.02.2007, 15:35:22 »
Хороший мамбот Quickdown for Remository

Вот тока вопрос возник.
Когда ставишь прямую ссылку етот ее в на той же
страничке открывает и получается, что посетитель уходит с сайта.
Если нажать после этого "назад" то он попадает в ремазиторий и опять
автоматически прыгает на ссылку... так по кругу.

Подскажите знающие как его заставить на новой страничке открывать ссылочки.
*

Ahmad

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Quickdown в новом окне
« Ответ #1 : 13.02.2007, 16:42:51 »
а у производителей, что интересно пример работы в новом окне открывает
http://www.remository.com/index.php?option=com_remository&func=showdown&id=454
*

Ahmad

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Quickdown в новом окне
« Ответ #2 : 28.07.2007, 15:50:43 »
Вопрос еще актуален.
То что он направляет в ремоситорий-это хорошо. Только после этого человек праямиком попадает на др. сайт для скачивания. А значит ушел.
Я так понимаю где-то надо типа target="_blank" прописать.
Вот текст самого мамбота.
Код
<?php

/**
 * Quickdown mambot for Remository  1.3 (for use with mambo 4.5.1+)
 * All rights reserved Mambo Open Source is Free Software Released under GNU/GPL
 * License : http://www.gnu.org/copyleft/gpl.html
 * @by Mamboaddons.com DEV
 * @package Mambo Open Source
 * @Copyright (C) 2004 - 2005 http://www.mamboaddons.com
 * Special Thanks to wolfi from http://www.mamboport.de for preparing version
 * 1.1b for Mambo 4.5.1
 */

defined('_VALID_MOS') or die('Direct Access to this location is not allowed.');

global $_MAMBOTS;
$_MAMBOTS->registerFunction('onPrepareContent', 'botQuickdown');

function botQuickdown($published, &$row, &$params, $page=0) {
global $database, $mosConfig_live_site, $mosConfig_absolute_path, $mosConfig_lang, $mosConfig_sitename;

if (!$published) {
$row->text = preg_replace('/{quickdown:.+?}/', '', $row->text);
$row->text = preg_replace('/{quickcat:.+?}/', '', $row->text);
$row->text = preg_replace('/{quickfolder:.+?}/', '', $row->text);
return;
}

//Loading Remository Configuration
include_once('components/com_remository/com_remository_settings.php');

# Load language if it exists
if (file_exists('components/com_remository/language/'.$mosConfig_lang.'.php')) {
include_once('components/com_remository/language/'.$mosConfig_lang.'.php');
} else {
include_once('components/com_remository/language/english.php');
}

// Get parameters from Database
$query = "SELECT id FROM #__mambots WHERE element = 'quickdown' AND folder = 'content'";
$database->setQuery($query);
$id = $database->loadResult();
$mambot = new mosMambot($database);
$mambot->load($id);
$param = &new mosParameters($mambot->params);

// Get parameters from Database
$content = $row->text;
$matches = array ();



if (isset($_POST['submit_vote_remository'])) {
user_rate($_POST['id'], $_POST['user_rating']);
}


// Get ids from Quickdown command
if (preg_match_all('/{quickdown:.+?}/', $content, $matches, PREG_PATTERN_ORDER)) {

//Get IDS
foreach ($matches as $fmatch) {
foreach ($fmatch as $match) {
$match = str_replace("{quickdown:", "", $match);
$match = str_replace("}", "", $match);
$output = createLink($match, $param,$Time_Stamp);
$content = preg_replace("/{quickdown:$match}/", $output, $content);
}
}
unset($matches);
}

if (preg_match_all('/{quickcat:.+?}/', $content, $matches, PREG_PATTERN_ORDER)) {
//Get IDS from quickcat cуmmand
foreach ($matches as $fmatch) {
foreach ($fmatch as $match) {
$match = str_replace("{quickcat:", "", $match);
$match = str_replace("}", "", $match);
$match = intval($match);
$sql = "SELECT f.id from #__downloads_files AS f, #__downloads_structure AS s WHERE s.container=$match AND s.item=f.containerid AND f.published=1";
$database->setQuery($sql);
$catrows=$database->loadObjectList();
$output = '';
if ($catrows) {
foreach ($catrows as $catrow){
$output.=createLink($catrow->id, $param, $Time_Stamp).$param->get("delimiter","<br><br>");
}
}
$content = preg_replace("/{quickcat:$match}/", $output, $content);
}
}
unset($matches);
}


if (preg_match_all('/{quickfolder:.+?}/', $content, $matches, PREG_PATTERN_ORDER)) {
//Get IDS from quickcat cуmmand
foreach ($matches as $fmatch) {
foreach ($fmatch as $match) {
$match = str_replace("{quickfolder:", "", $match);
$match = str_replace("}", "", $match);
$match = intval($match);
$sql = "SELECT id from #__downloads_files WHERE containerid=$match AND published='1'";
$database->setQuery($sql);
$folderrows=$database->loadObjectList();
$output = '';
if ($folderrows) {
foreach ($folderrows as $folderrow){
$output.=createLink($folderrow->id, $param, $Time_Stamp).$param->get("delimiter","<br><br>");
}
}
$content = preg_replace("/{quickfolder:$match}/", $output, $content);
}
}
unset($matches);
}

$row->text = $content;
return true;
}

if (!is_callable('getItemID')) {
function getItemID ($component_string) {
global $database;
if (isset($GLOBALS['remosef_itemids'][$component_string])) return $GLOBALS['remosef_itemids'][$component_string];
$component_string = $database->getEscaped($component_string);
$database->setQuery("SELECT id FROM #__menu WHERE link = 'index.php?option=$component_string'");
$GLOBALS['remosef_itemids'][$component_string] = $database->loadResult();
return $GLOBALS['remosef_itemids'][$component_string];
}
}

/**
* This function create the output for the file with the given id
* @param int $id - The id of the file
* @param object $param - The parameter object, that hold the parameter
* @param TimeStamp $Time_Stamp - The Timestamp var from the Remository config
* @return String - The generated table with the Information for the file
*/
function createLink($id, &$param, $Time_Stamp){
global $database, $mosConfig_live_site, $mosConfig_absolute_path, $mosConfig_lang;

global $mosConfig_sef;

// Find out $Itemid
$base_url = 'index.php?option=com_remository&Itemid='.getItemID('com_remository');        // Base URL string

// Generate download
//Getting File-info from Database
$id = intval($id);
$database->setQuery("SELECT * FROM #__downloads_files WHERE id=$id");
$filelist = $database->loadObjectList();
if ($filelist) {
$file = $filelist[0];
$allvotes = 0;
$rating = 0;
$sql = "SELECT COUNT(id) as allvotes, AVG(value) as rating FROM #__downloads_log WHERE type=3 AND fileid=$id";
$database->setQuery($sql);
$result = $database->query();
$database->loadObject($votes);
$allvotes = $votes->allvotes;
if ($votes->rating) $rating = round($votes->rating);
else $rating = 0;
$output = "<table>";

// short description on top position
if ($param->get("show_shortdesc","1") AND $param->get("show_shortdesc_pos")=='top'){
$output .= "<tr><td>$file->smalldesc<br><br></td></tr>";
}

// full description on top position
if ($param->get("show_desc","1") AND $param->get("show_desc_pos")=='top'){
$output .= "<tr><td>$file->description<br><br></td></tr>";
}
//downloadlink
if ($param->get("show_download","1")){
$linkurl = sefRelToAbs($base_url."&func=startdown&id=$id");
$output .= "<tr><td><a href=\"$linkurl\"><img src=\"components/com_remository/images/download_trans.gif\"border=\"0\">&nbsp;<b>"._DOWNLOAD."&nbsp;$file->filetitle</b></a></td></tr>";
}

$output .= "<tr><td><table>";

//filetitle and link to entry
if ($param->get('show_title', "1")){
$output .= "<tr><td><b>"._DOWN_FILE_TITLE."</b></td><td>$file->filetitle";

if ($param->get("show_ltentry","1")){
$linkurl = sefRelToAbs($base_url."&func=fileinfo&id=$id");
$output .= "&nbsp;<a href=\"$linkurl\"><i>(Подробнее)</i></a>";
}
$output .= "</td></tr>";
}
//filetype
if ($param->get('show_type', "1")){
$output .= "<tr><td><b>"._DOWN_FILE_TYPE."</b></td><td>$file->filetype</td></tr>";
}
//file version
if ($param->get('show_version', "1")){
$output .= "<tr><td><b>"._DOWN_FILE_VER."</b></td><td>$file->fileversion</td></tr>";
}
//filesize
if ($param->get('show_size', "1")){
$output .= "<tr><td><b>"._DOWN_FILE_SIZE."</b></td><td>$file->filesize</td></tr>";
}
//license
if ($param->get('show_license', "1")){
$output .= "<tr><td><b>"._DOWN_LICENSE."</b></td><td>$file->license</td></tr>";
}
//author
if ($param->get('show_author', "1")){
$output .= "<tr><td><b>"._DOWN_FILE_AUTHOR."</b></td><td>$file->fileauthor</td></tr>";
}
//homepage
if ($param->get('show_homepage', "1")){
//check if http is given in url
if(!strpos($file->filehomepage,"ttp://")){$nurl="http://$file->filehomepage";}
else {$nurl="$file->filehomepage";}
$output .= "<tr><td><b>"._DOWN_FILE_HOMEPAGE."</b></td><td><a href=\"$nurl\" target=\"_blank\">$file->filehomepage</a></td></tr>";
}
//download count
if ($param->get('show_count', "1")){
$output .= "<tr><td><b>"._DOWN_DOWNLOADS."</b></td><td>$file->downloads</td></tr>";
}
//show rating
if ($param->get('show_rating', "1")){
$output .= "<tr><td><b>"._DOWN_RATING."</b></td><td><img src=\"components/com_remository/images/stars/$rating.gif\">&nbsp;($allvotes "._DOWN_VOTES_TITLE.")</td></tr>";
}
/* form for frontend Voting */
if ($param->get('allow_rating', "1")){
$output .= "<tr><td><b>"._DOWN_YOUR_VOTE."</b></td><td><FORM METHOD=POST ACTION=\"".$_SERVER['PHP_SELF']."\">";
$output .= "<SELECT NAME=\"user_rating\" class=\"inputbox\">";
$output .= "<option value=\"0\">?</option>";
$output .= "<option value=\"1\">1</option>";
$output .= "<option value=\"2\">2</option>";
$output .= "<option value=\"3\">3</option>";
$output .= "<option value=\"4\">4</option>";
$output .= "<option value=\"5\">5</option>";
$output .= "</SELECT>";
$output .= "<INPUT CLASS=\"button\" TYPE=\"submit\" NAME=\"submit_vote_remository\" VALUE="._DOWN_RATE_BUTTON.">";
$output .= "<INPUT TYPE=\"hidden\" NAME=\"id\" value=\"$id\">";
$output .= "</FORM> </td></tr>";
/* end form */
}

$output .= "</table></td></tr><tr><td>";

// short description on bottom position
if ($param->get("show_shortdesc","1") AND $param->get("show_shortdesc_pos")=='bottom'){
$output .= "<tr><td colspan=\"2\"><br>$file->smalldesc</td></tr>";
}

// full description on top position
if ($param->get("show_desc","1") AND $param->get("show_desc_pos")=='bottom'){
$output .= "<tr><td colspan=\"2\"><br>$file->description</td></tr>";
}

$output .= "</td></tr></table>";

}
return ($output);
}


function user_rate($id, $user_rating) {
global $database, $my;
//code taken from origina reomsitory.html.php
if (!is_numeric($user_rating)) $user_rating = 0;
if (($user_rating >= 1) AND ($user_rating <= 5)) {
$currip = getenv("REMOTE_ADDR");
$sql = "SELECT id FROM #__downloads_log WHERE fileid=$id AND type=3 AND ipaddress='$currip'";
$database->setQuery($sql);
$alreadyvoted = $database->loadResultArray();
if (is_array($alreadyvoted) AND count($alreadyvoted)>0) {
echo '<TABLE><TR><TD><B>'._DOWN_ALREADY_VOTE.'</B></TD></TR></TABLE>';
return;
}
$type = 3;
$date = date('Y-m-d H:i:s');
$id = intval($id);
$user_rating = intval($user_rating);
$sql = "INSERT INTO #__downloads_log (type, date, userid, fileid, value, ipaddress) VALUES ('3', '$date', $my->id, $id, $user_rating, '$currip')";
$database->setQuery($sql);
$database->query();
}
}
?>
*

alexsys

  • Осваиваюсь на форуме
  • 18
  • 6 / 0
Re: Quickdown в новом окне
« Ответ #3 : 18.08.2007, 17:15:21 »
Подскажите новичку как вообще пользоваться мамботом?
в описании мамбота написано: {quickcat:[id]}  - для быстрого перехода ко всей категории.
Объясните приципы работы мамбота и где прописывать соответствующую строчку. Т.к. при попытке написания данной строки в статичном содержимом ничего хорошего не выходит :)
Спасибо за понимания.
*

hancock123

  • Новичок
  • 2
  • 0 / 0
Re: Quickdown в новом окне
« Ответ #4 : 05.03.2010, 12:02:56 »
Помогите пожалуйста настроить внешний вид этого плагина? В каком файле нужно вносить изменения?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Компонент Remository с мамботом Quickdown. Как пользоваться?

Автор worldman

Ответов: 9
Просмотров: 5221
Последний ответ 22.02.2008, 17:25:38
от nikonor