Скрипт 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: | Tags: /
| Rating:
Leave a Reply