Скрипт GreaseMonkey расширяющий функционал Joomla
В данный момент работаю над переносом большого кол-ва данных в Joomla. Так вышло, что приходится много делать вручную, поэтому решил сэкономить время, да и надоедает, повтор монотонных действий, итак:
1. Кнопка "Стандартный шаблон материала" в верхнем меню:
Выглядит это так:

Работает это так:
Функционал по нажатию тот же самый, как если бы Вы нажали:
Создать > Материалы > Материал > Стандартный шаблон материалов
2. Когда у Вас большое меню, то при добавлении очередного пункта, приходится, заново искать родительский раздел или категорию. Если это единичный материал, то ладно, не проблема. Но у меня стояла задача добавить порядка 500 пунктов, согласитесь, лень каждый раз мотать искать нужный раздел, особенно если следующие 20 записей будут в него, итак решение:
Выглядит это так:
Работает это так:
а) Определяетесь с категорией в которую будут идти следующие добавления, например "Рыбалка"
б) нажимаете кнопку "Установить метку", хитрым образом категория записывается в куку
в) при следующем входе на эту страницу, категория будет выбрана автоматически
Время экономит очень-очень..
Внимание:
1. Все это писалось под FireFox
2. Мешанина в коде (JQuery даже есть), обусловлена тем, что я не знал, во время написания, пригодится он мне или нет. Нету времени на красивые конструкции, скрипт сваял за 10 минут, чтобы облегчить задачу.
3. Вылизывать скрипты, пока нет времени, поэтому оставляю в том виде в котором есть.
1. Кнопка "Стандартный шаблон материала" в верхнем меню:
// ==UserScript==
// @name Sklon Add Menu
// @namespace Sklon
// @include http://site/administrator/index.php?option=com_menus&task=view&menutype=mainmenu
// ==/UserScript==
var oldButtHTML = document.getElementById('toolbar-new').innerHTML;
var newHTML = '';
newHTML += '<table cellspacing="0" cellpadding="0"><tr><td>';
newHTML += '<a href="#" onclick="javascript:window.location.href=\'index.php?option=com_menus&task=edit&type=component&url[option]=com_content&url[view]=article&menutype=mainmenu\';" class="toolbar">';
newHTML += '<span class="icon-32-new" title="Создать элемент меню стандартного шаблона">';
newHTML += '</span>';
newHTML += 'Создать СШМ';
newHTML += '</a>';
newHTML += '</td><td>'+oldButtHTML+'</td></tr></table>';
document.getElementById('toolbar-new').innerHTML = newHTML;
Выглядит это так:

Работает это так:
Функционал по нажатию тот же самый, как если бы Вы нажали:
Создать > Материалы > Материал > Стандартный шаблон материалов
2. Когда у Вас большое меню, то при добавлении очередного пункта, приходится, заново искать родительский раздел или категорию. Если это единичный материал, то ладно, не проблема. Но у меня стояла задача добавить порядка 500 пунктов, согласитесь, лень каждый раз мотать искать нужный раздел, особенно если следующие 20 записей будут в него, итак решение:
// ==UserScript==
// @name Parent Auto Select
// @namespace Sklon
// @include http://site/administrator/index.php?option=com_menus&task=edit&type=component&url[option]=com_content&url[view]=article&menutype=mainmenu
// ==/UserScript==
var dom={};
// Add jQuery
(function(){
if (typeof unsafeWindow.jQuery == 'undefined') {
var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement,
GM_JQ = document.createElement('script');
GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
GM_JQ.type = 'text/javascript';
GM_JQ.async = true;
GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
}
GM_wait();
})();
// Check if jQuery's loaded
function GM_wait() {
if (typeof unsafeWindow.jQuery == 'undefined') {
window.setTimeout(GM_wait, 100);
} else {
dom.query = unsafeWindow.jQuery.noConflict(true);
letsJQuery();
}
}
// All your GM code must be inside this function
function letsJQuery() {
var WrapperHtml = dom.query('#parent').parent().html();
var newHTML = '';
newHTML += '<div style="margin-bottom:5px;">';
newHTML += 'Метка: ';
newHTML += '<input type="text" value="" id="fi_mark" readonly="readonly"/> ';
newHTML += '<input type="button" value="Установить метку" onclick="';
newHTML += "var msel=document.getElementById('parent');";
newHTML += "var str = msel.options[msel.selectedIndex].text;"
newHTML += "var spos = msel.options[msel.selectedIndex].value;"
newHTML += "var tempstr = str.split(' ');"
newHTML += "document.getElementById('fi_mark').value = spos+') '+tempstr.join('');"
newHTML += "var hash='';";
newHTML += "for(var i=0;i<str.length; i++) hash+=''+str.charCodeAt(i);";
newHTML += "document.cookie='hash='+hash+'; path=/;';"
newHTML += "document.cookie='hashpos='+spos+'; path=/;';"
newHTML += '" /> ';
newHTML += '<!--<input type="button" value="Перейти к метке ↓" />-->';
newHTML += '';
newHTML += '</div>';
dom.query('#parent').parent().prepend(newHTML);
var HashCookieVal = '';
var HashCookiePosVal = '';
name='hash';
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = dom.query.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
if (cookieValue!=null) {HashCookieVal = cookieValue;}
name='hashpos';
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = dom.query.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
if (cookieValue!=null) {HashCookiePosVal = cookieValue;}
if ((HashCookieVal!=null) && (HashCookiePosVal!=null)) {
var objSel = document.getElementById('parent');
for (var i=0; i<objSel.options.length; i++) {
var hash = '';
var str=objSel.options[i].text
objSel.options[i].selected=false;
for (var j=0; j<str.length; j++) hash+=''+str.charCodeAt(j);
if (HashCookieVal==hash && (Math.abs(objSel.options[i].value-HashCookiePosVal)<2)) {
var pstr = objSel.options[i].text;
var spos = objSel.options[i].value;
var ptempstr = pstr.split(String.fromCharCode(160));
document.getElementById('fi_mark').value = spos+') '+ptempstr.join('');
objSel.options[i].selected=true;
document.cookie='hashpos='+spos+'; path=/;';
break;
}
}
}
}
Выглядит это так:
Работает это так:
а) Определяетесь с категорией в которую будут идти следующие добавления, например "Рыбалка"
б) нажимаете кнопку "Установить метку", хитрым образом категория записывается в куку
в) при следующем входе на эту страницу, категория будет выбрана автоматически
Время экономит очень-очень..
Внимание:
1. Все это писалось под FireFox
2. Мешанина в коде (JQuery даже есть), обусловлена тем, что я не знал, во время написания, пригодится он мне или нет. Нету времени на красивые конструкции, скрипт сваял за 10 минут, чтобы облегчить задачу.
3. Вылизывать скрипты, пока нет времени, поэтому оставляю в том виде в котором есть.
Просмотров: 1117



