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

cs-portal

  • Захожу иногда
  • 53
  • 1 / 1
Оптимизирую свой сайт.
подключил CDN
теперь изменяю ссылки
вот только не могу изменить ссылку на mootools.js
к пути в таком случае  добавляется еще и целый сайт
например
вместо 123.site.ru/mootools.js
выходит

123.site.ru.123.site.ru/mootools.js

вот кусочек кода

Код
if ($debug || $konkcheck) {
JHTML::script('mootools-uncompressed.js', 'media/system/js/', false);
} else {
JHTML::script('mootools.js', 'media/system/js/', false);

это в /libraries/joomla/html/html/behavior.php
скорость согласно page speed/ Yslow  90/88  а с этим если сделаю будет еще выше
нужно чтото сделать чтобы путь был с другого места а недобавлялась ссылка двойная
*

cs-portal

  • Захожу иногда
  • 53
  • 1 / 1
Re: Помогите изменить путь к mootools.js
« Ответ #1 : 25.08.2011, 13:21:27 »
апаю тему

никак не могу изменить путь не с локальной загрузки а сдругого домена надо чтобы грузился.  mootools.js

вот полный php


Код
<?php

defined('JPATH_BASE') or die();

class JHTMLBehavior
{

function mootools($debug = null)
{
static $loaded;

// Only load once
if ($loaded) {
return;
}

// If no debugging value is set, use the configuration setting
if ($debug === null) {
$config = &JFactory::getConfig();
$debug = $config->getValue('config.debug');
}

// TODO NOTE: Here we are checking for Konqueror - If they fix thier issue with compressed, we will need to update this
$konkcheck = isset($_SERVER['HTTP_USER_AGENT'])? strpos(strtolower($_SERVER['HTTP_USER_AGENT']), "konqueror") : null;

if ($debug || $konkcheck) {
JHTML::script('mootools-uncompressed.js', 'media/system/js/', false);
} else {
  JHTML::script('mootools.js', 'media/system/js/', false);                        
}
$loaded = true;
return;
}

function caption() {
JHTML::script('mootools.js');
}

function formvalidation() {
JHTML::script('validate.js' );
}

function switcher() {
JHTML::script('switcher.js' );
}

function combobox() {
JHTML::script('combobox.js' );
}

function tooltip($selector='.hasTip', $params = array())
{
static $tips;

if (!isset($tips)) {
$tips = array();
}

// Include mootools framework
JHTMLBehavior::mootools();

$sig = md5(serialize(array($selector,$params)));
if (isset($tips[$sig]) && ($tips[$sig])) {
return;
}

// Setup options object
$opt['maxTitleChars'] = (isset($params['maxTitleChars']) && ($params['maxTitleChars']))? (int)$params['maxTitleChars'] : 50 ;
// offsets needs an array in the format: array('x'=>20, 'y'=>30)
$opt['offsets'] = (isset($params['offsets']) && (is_array($params['offsets'])))? $params['offsets'] : null;
$opt['showDelay'] = (isset($params['showDelay']))? (int)$params['showDelay'] : null;
$opt['hideDelay'] = (isset($params['hideDelay']))? (int)$params['hideDelay'] : null;
$opt['className'] = (isset($params['className']))? $params['className'] : null;
$opt['fixed'] = (isset($params['fixed']) && ($params['fixed']))? '\\true' : '\\false';
$opt['onShow'] = (isset($params['onShow']))? '\\'.$params['onShow'] : null;
$opt['onHide'] = (isset($params['onHide']))? '\\'.$params['onHide'] : null;

$options = JHTMLBehavior::_getJSObject($opt);

// Attach tooltips to document
$document =& JFactory::getDocument();
$tooltipInit = ' window.addEvent(\'domready\', function(){ var JTooltips = new Tips($$(\''.$selector.'\'), '.$options.'); });';
$document->addScriptDeclaration($tooltipInit);

// Set static array
$tips[$sig] = true;
return;
}

function modal($selector='a.modal', $params = array())
{
static $modals;
static $included;

$document =& JFactory::getDocument();

// Load the necessary files if they haven't yet been loaded
if (!isset($included)) {

// Load the javascript and css
JHTML::script('modal.js');
JHTML::stylesheet('modal.css');

$included = true;
}

if (!isset($modals)) {
$modals = array();
}

$sig = md5(serialize(array($selector,$params)));
if (isset($modals[$sig]) && ($modals[$sig])) {
return;
}

// Setup options object
$opt['ajaxOptions'] = (isset($params['ajaxOptions']) && (is_array($params['ajaxOptions'])))? $params['ajaxOptions'] : null;
$opt['size'] = (isset($params['size']) && (is_array($params['size'])))? $params['size'] : null;
$opt['onOpen'] = (isset($params['onOpen']))? $params['onOpen'] : null;
$opt['onClose'] = (isset($params['onClose']))? $params['onClose'] : null;
$opt['onUpdate'] = (isset($params['onUpdate']))? $params['onUpdate'] : null;
$opt['onResize'] = (isset($params['onResize']))? $params['onResize'] : null;
$opt['onMove'] = (isset($params['onMove']))? $params['onMove'] : null;
$opt['onShow'] = (isset($params['onShow']))? $params['onShow'] : null;
$opt['onHide'] = (isset($params['onHide']))? $params['onHide'] : null;

$options = JHTMLBehavior::_getJSObject($opt);

// Attach modal behavior to document
$document->addScriptDeclaration("
window.addEvent('domready', function() {

SqueezeBox.initialize(".$options.");

$$('".$selector."').each(function(el) {
el.addEvent('click', function(e) {
new Event(e).stop();
SqueezeBox.fromElement(el);
});
});
});");

// Set static array
$modals[$sig] = true;
return;
}

function uploader($id='file-upload', $params = array())
{
JHTML::script('swf.js' );
JHTML::script('uploader.js' );

static $uploaders;

if (!isset($uploaders)) {
$uploaders = array();
}

if (isset($uploaders[$id]) && ($uploaders[$id])) {
return;
}

// Setup options object
$opt['url'] = (isset($params['targetURL']))? $params['targetURL'] : null ;
$opt['swf'] = (isset($params['swf']))? $params['swf'] : JURI::root(true).'/media/system/swf/uploader.swf';
$opt['multiple'] = (isset($params['multiple']) && !($params['multiple']))? '\\false' : '\\true';
$opt['queued'] = (isset($params['queued']) && !($params['queued']))? '\\false' : '\\true';
$opt['queueList'] = (isset($params['queueList']))? $params['queueList'] : 'upload-queue';
$opt['instantStart'] = (isset($params['instantStart']) && ($params['instantStart']))? '\\true' : '\\false';
$opt['allowDuplicates'] = (isset($params['allowDuplicates']) && !($params['allowDuplicates']))? '\\false' : '\\true';
$opt['limitSize'] = (isset($params['limitSize']) && ($params['limitSize']))? (int)$params['limitSize'] : null;
$opt['limitFiles'] = (isset($params['limitFiles']) && ($params['limitFiles']))? (int)$params['limitFiles'] : null;
$opt['optionFxDuration'] = (isset($params['optionFxDuration']))? (int)$params['optionFxDuration'] : null;
$opt['container'] = (isset($params['container']))? '\\$('.$params['container'].')' : '\\$(\''.$id.'\').getParent()';
$opt['types'] = (isset($params['types']))?'\\'.$params['types'] : '\\{\'All Files (*.*)\': \'*.*\'}';


// Optional functions
$opt['createReplacement'] = (isset($params['createReplacement']))? '\\'.$params['createReplacement'] : null;
$opt['onComplete'] = (isset($params['onComplete']))? '\\'.$params['onComplete'] : null;
$opt['onAllComplete'] = (isset($params['onAllComplete']))? '\\'.$params['onAllComplete'] : null;

/*  types: Object with (description: extension) pairs, default: Images (*.jpg; *.jpeg; *.gif; *.png)
 */

$options = JHTMLBehavior::_getJSObject($opt);

// Attach tooltips to document
$document =& JFactory::getDocument();
$uploaderInit = 'sBrowseCaption=\''.JText::_('Browse Files', true).'\';
sRemoveToolTip=\''.JText::_('Remove from queue', true).'\';
window.addEvent(\'load\', function(){
var Uploader = new FancyUpload($(\''.$id.'\'), '.$options.');
$(\'upload-clear\').adopt(new Element(\'input\', { type: \'button\', events: { click: Uploader.clearList.bind(Uploader, [false])}, value: \''.JText::_('Clear Completed').'\' })); });';
$document->addScriptDeclaration($uploaderInit);

// Set static array
$uploaders[$id] = true;
return;
}

function tree($id, $params = array(), $root = array())
{
static $trees;

if (!isset($trees)) {
$trees = array();
}

// Include mootools framework
JHTMLBehavior::mootools();
JHTML::script('mootree.js');
JHTML::stylesheet('mootree.css');

if (isset($trees[$id]) && ($trees[$id])) {
return;
}

// Setup options object
$opt['div'] = (array_key_exists('div', $params))? $params['div'] : $id.'_tree';
$opt['mode'] = (array_key_exists('mode', $params))? $params['mode'] : 'folders';
$opt['grid'] = (array_key_exists('grid', $params))? '\\'.$params['grid'] : '\\true';
$opt['theme'] = (array_key_exists('theme', $params))? $params['theme'] : JURI::root(true).'/media/system/images/mootree.gif';

// Event handlers
$opt['onExpand'] = (array_key_exists('onExpand', $params))? '\\'.$params['onExpand'] : null;
$opt['onSelect'] = (array_key_exists('onSelect', $params))? '\\'.$params['onSelect'] : null;
$opt['onClick'] = (array_key_exists('onClick', $params))? '\\'.$params['onClick'] : '\\function(node){  window.open(node.data.url, $chk(node.data.target)? node.data.target : \'_self\'); }';
$options = JHTMLBehavior::_getJSObject($opt);

// Setup root node
$rt['text'] = (array_key_exists('text', $root))? $root['text'] : 'Root';
$rt['id'] = (array_key_exists('id', $root))? $root['id'] : null;
$rt['color'] = (array_key_exists('color', $root))? $root['color'] : null;
$rt['open'] = (array_key_exists('open', $root))? '\\'.$root['open'] : '\\true';
$rt['icon'] = (array_key_exists('icon', $root))? $root['icon'] : null;
$rt['openicon'] = (array_key_exists('openicon', $root))? $root['openicon'] : null;
$rt['data'] = (array_key_exists('data', $root))? $root['data'] : null;
$rootNode = JHTMLBehavior::_getJSObject($rt);

$treeName = (array_key_exists('treeName', $params))? $params['treeName'] : '';

$js = ' window.addEvent(\'domready\', function(){
tree'.$treeName.' = new MooTreeControl('.$options.','.$rootNode.');
tree'.$treeName.'.adopt(\''.$id.'\');})';

// Attach tooltips to document
$document =& JFactory::getDocument();
$document->addScriptDeclaration($js);

// Set static array
$trees[$id] = true;
return;
}

function calendar()
{
$document =& JFactory::getDocument();
JHTML::stylesheet('calendar-jos.css', 'media/system/css/', array(' title' => JText::_( 'green' ),' media' => 'all' ));
JHTML::script( 'calendar.js', 'media/system/js/' );
JHTML::script( 'calendar-setup.js', 'media/system/js/' );

$translation = JHTMLBehavior::_calendartranslation();
if($translation) {
$document->addScriptDeclaration($translation);
}
}

/**
* Keep session alive, for example, while editing or creating an article.
*/
function keepalive()
{
// Include mootools framework
JHTMLBehavior::mootools();

$config =& JFactory::getConfig();
$lifetime = ( $config->getValue('lifetime') * 60000 );
$refreshTime =  ( $lifetime <= 60000 )? 30000 : $lifetime - 60000;
//refresh time is 1 minute less than the liftime assined in the configuration.php file

$document =& JFactory::getDocument();
$script  = '';
$script .= 'function keepAlive( ) {';
$script .=  ' var myAjax = new Ajax( "index.php", { method: "get" } ).request();';
$script .=  '}';
$script .= ' window.addEvent("domready", function()';
$script .= '{ keepAlive.periodical('.$refreshTime.' ); }';
$script .=  ');';

$document->addScriptDeclaration($script);

return;
}

/**
* Internal method to get a JavaScript object notation string from an array
*
* @param array $array The array to convert to JavaScript object notation
* @return string JavaScript object notation representation of the array
* @since 1.5
*/
function _getJSObject($array=array())
{
// Initialize variables
$object = '{';

// Iterate over array to build objects
foreach ((array)$array as $k => $v)
{
if (is_null($v)) {
continue;
}
if (!is_array($v) && !is_object($v)) {
$object .= ' '.$k.': ';
$object .= (is_numeric($v) || strpos($v, '\\') === 0)? (is_numeric($v))? $v : substr($v, 1) : "'".$v."'";
$object .= ',';
} else {
$object .= ' '.$k.': '.JHTMLBehavior::_getJSObject($v).',';
}
}
if (substr($object, -1) == ',') {
$object = substr($object, 0, -1);
}
$object .= '}';

return $object;
}

/**
* Internal method to translate the JavaScript Calendar
*
* @return string JavaScript that translates the object
* @since 1.5
*/
function _calendartranslation()
{
static $jsscript = 0;

if($jsscript == 0)
{
$return = 'Calendar._DN = new Array ("'.JText::_('Sunday').'", "'.JText::_('Monday').'", "'.JText::_('Tuesday').'", "'.JText::_('Wednesday').'", "'.JText::_('Thursday').'", "'.JText::_('Friday').'", "'.JText::_('Saturday').'", "'.JText::_('Sunday').'");Calendar._SDN = new Array ("'.JText::_('Sun').'", "'.JText::_('Mon').'", "'.JText::_('Tue').'", "'.JText::_('Wed').'", "'.JText::_('Thu').'", "'.JText::_('Fri').'", "'.JText::_('Sat').'", "'.JText::_('Sun').'"); Calendar._FD = 0; Calendar._MN = new Array ("'.JText::_('January').'", "'.JText::_('February').'", "'.JText::_('March').'", "'.JText::_('April').'", "'.JText::_('May').'", "'.JText::_('June').'", "'.JText::_('July').'", "'.JText::_('August').'", "'.JText::_('September').'", "'.JText::_('October').'", "'.JText::_('November').'", "'.JText::_('December').'"); Calendar._SMN = new Array ("'.JText::_('January_short').'", "'.JText::_('February_short').'", "'.JText::_('March_short').'", "'.JText::_('April_short').'", "'.JText::_('May_short').'", "'.JText::_('June_short').'", "'.JText::_('July_short').'", "'.JText::_('August_short').'", "'.JText::_('September_short').'", "'.JText::_('October_short').'", "'.JText::_('November_short').'", "'.JText::_('December_short').'");Calendar._TT = {};Calendar._TT["INFO"] = "'.JText::_('About the calendar').'";
  Calendar._TT["ABOUT"] =
 "DHTML Date/Time Selector\n" +
 "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" +
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Date selection:\n" +
"- Use the \xab, \xbb buttons to select year\n" +
"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
"- Hold mouse button on any of the above buttons for faster selection.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Time selection:\n" +
"- Click on any of the time parts to increase it\n" +
"- or Shift-click to decrease it\n" +
"- or click and drag for faster selection.";

Calendar._TT["PREV_YEAR"] = "'.JText::_('Prev. year (hold for menu)').'";Calendar._TT["PREV_MONTH"] = "'.JText::_('Prev. month (hold for menu)').'"; Calendar._TT["GO_TODAY"] = "'.JText::_('Go Today').'";Calendar._TT["NEXT_MONTH"] = "'.JText::_('Next month (hold for menu)').'";Calendar._TT["NEXT_YEAR"] = "'.JText::_('Next year (hold for menu)').'";Calendar._TT["SEL_DATE"] = "'.JText::_('Select date').'";Calendar._TT["DRAG_TO_MOVE"] = "'.JText::_('Drag to move').'";Calendar._TT["PART_TODAY"] = "'.JText::_('(Today)').'";Calendar._TT["DAY_FIRST"] = "'.JText::_('Display %s first').'";Calendar._TT["WEEKEND"] = "0,6";Calendar._TT["CLOSE"] = "'.JText::_('Close').'";Calendar._TT["TODAY"] = "'.JText::_('Today').'";Calendar._TT["TIME_PART"] = "'.JText::_('(Shift-)Click or drag to change value').'";Calendar._TT["DEF_DATE_FORMAT"] = "'.JText::_('%Y-%m-%d').'"; Calendar._TT["TT_DATE_FORMAT"] = "'.JText::_('%a, %b %e').'";Calendar._TT["WK"] = "'.JText::_('wk').'";Calendar._TT["TIME"] = "'.JText::_('Time:').'";';
$jsscript = 1;
return $return;
} else {
return false;
}
}
}


повторю что если вписать путь не /media/mootools.js   а  http://site.ru/media/mootool.js
то возникает дополн запрос откуда то и в итоге выходит   http;//site.ru/http://site.ru/media/mootools.js
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Изменить текст на вкладке браузера с "главная" на название сайта

Автор EvgeniyyB

Ответов: 11
Просмотров: 18739
Последний ответ 07.03.2018, 15:50:48
от vetalist
как изменить заголовок страницы во вкладке браузера?

Автор Руслан71

Ответов: 4
Просмотров: 3516
Последний ответ 10.08.2016, 10:51:39
от Руслан71
Тормозит сайт страшно ! Помогите

Автор Lider

Ответов: 4
Просмотров: 1605
Последний ответ 29.02.2016, 21:20:17
от SeBun
Изменить ширину колонки на главной странице

Автор dmalexandrov

Ответов: 5
Просмотров: 2158
Последний ответ 18.11.2015, 13:17:29
от umbabaraumba
Изменить код

Автор Zegeberg

Ответов: 2
Просмотров: 1909
Последний ответ 03.08.2015, 05:45:32
от filat010