Скрипт GreaseMonkey расширяющий функционал Joomla

Добавил admin  JavaScript, CMS  Комментариев: 1 В избранное:
В данный момент работаю над переносом большого кол-ва данных в Joomla. Так вышло, что приходится много делать вручную, поэтому решил сэкономить время, да и надоедает, повтор монотонных действий, итак:

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;


Выглядит это так:
Скрипт GreaseMonkey расширяющий функционал Joomla


Работает это так:
Функционал по нажатию тот же самый, как если бы Вы нажали:
Создать > Материалы > Материал > Стандартный шаблон материалов

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('&nbsp;');"                    
        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="Перейти к метке &darr;" />-->';
        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;
                }
            }
        }
    }


Выглядит это так:
Скрипт GreaseMonkey расширяющий функционал Joomla


Работает это так:
а) Определяетесь с категорией в которую будут идти следующие добавления, например "Рыбалка"
б) нажимаете кнопку "Установить метку", хитрым образом категория записывается в куку
в) при следующем входе на эту страницу, категория будет выбрана автоматически

Время экономит очень-очень..

Внимание:

1. Все это писалось под FireFox
2. Мешанина в коде (JQuery даже есть), обусловлена тем, что я не знал, во время написания, пригодится он мне или нет. Нету времени на красивые конструкции, скрипт сваял за 10 минут, чтобы облегчить задачу.
3. Вылизывать скрипты, пока нет времени, поэтому оставляю в том виде в котором есть.
 (голосов: 0)
Просмотров:  1117 Версия для печати


>