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

В данный момент работаю над переносом большого кол-ва данных в Joomla. Так вышло, что приходится много делать вручную, поэтому решил сэкономить время, да и надоедает, повтор монотонных действий, итак..
1. Кнопка "Стандартный шаблон материала" в верхнем меню:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | 
						    // ==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 записей будут в него, итак решение:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115  | 
						    // ==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 = 'https://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. Вылизывать скрипты, пока нет времени, поэтому оставляю в том виде в котором есть.
Author: | Rating: / | Tags:


Leave a Reply