DHTML Menu ломает работу админки. Другие скрипты не работают [РЕШЕНО]

Главные вкладки

Аватар пользователя tlito tlito 2 ноября 2014 в 16:55

здравствуйте, опытные друпал-разработчики!
проблема с DHTML Menu. Во внешнем сайте работает идеально. Но при включении опции expand on bullet
админка начинает сбоить: не появляется ckeditor, невозможно раскрыть раскрывающееся меню, например в настройках профиля ckeditor.
overlay отключен, тема админки seven, в html-коде аминки есть вставка dhtml, хотя он включен только для меню категорий на внешнем сайте. вот так вставляется скрипт dhtml в админке:

<script type="text/javascript" src="http://xn--90abeovs5a.xn--p1ai/sites/all/modules/dhtml_menu/dhtml_menu.j...></script>

...

<script type="text/javascript">
<!--//--><![CDATA[//><!--
jQuery.extend(Drupal.settings, {"basePath":"\/","pathPrefix":"","ajaxPageState":{"theme":"seven","theme_token":"VPzCk82eRQNx6iIh2vjeFoAFyulzeGnBaTWri2Roe0I","jquery_version":"1.7","js":{"sites\/all\/modules\/ckeditor\/includes\/ckeditor.utils.js":1,"sites\/all\/modules\/ckeditor\/ckeditor\/ckeditor.js":1,"sites\/all\/modules\/jquery_update\/replace\/jquery\/1.7\/jquery.min.js":1,"misc\/jquery.once.js":1,"misc\/drupal.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.core.min.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.widget.min.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/external\/jquery.cookie.js":1,"sites\/all\/modules\/jquery_update\/replace\/misc\/jquery.form.min.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.button.min.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.mouse.min.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.draggable.min.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.position.min.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.resizable.min.js":1,"sites\/all\/modules\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.dialog.min.js":1,"sites\/all\/modules\/token\/token.js":1,"misc\/vertical-tabs.js":1,"misc\/form.js":1,"misc\/states.js":1,"misc\/ajax.js":1,"sites\/all\/modules\/jquery_update\/js\/jquery_update.js":1,"sites\/all\/modules\/admin_menu\/admin_menu.js":1,"sites\/all\/modules\/admin_menu\/admin_menu_toolbar\/admin_menu_toolbar.js":1,"0":1,"public:\/\/languages\/ru_k5eJGOg1lOqzYQBIlrbIEFCKHWoS2KNM7wAHDsrlVRA.js":1,"sites\/all\/modules\/dhtml_menu\/dhtml_menu.js":1,"sites\/all\/modules\/term_reference_tree\/term_reference_tree.js":1,"misc\/autocomplete.js":1,"misc\/textarea.js":1,"modules\/field\/modules\/text\/text.js":1,"modules\/filter\/filter.js":1,"misc\/progress.js":1,"modules\/file\/file.js":1,"misc\/collapse.js":1,"modules\/menu\/menu.js":1,"sites\/all\/modules\/metatag\/metatag.vertical-tabs.js":1,"sites\/all\/modules\/pathauto\/pathauto.js":1,"modules\/comment\/comment-node-form.js":1,"modules\/node\/node.js":1,"sites\/all\/libraries\/swfupload\/swfupload.js":1,"sites\/all\/libraries\/swfupload\/plugins\/swfupload.queue.js":1},"css":{"modules\/system\/system.base.css":1,"modules\/system\/system.menus.css":1,"modules\/system\/system.messages.css":1,"modules\/system\/system.theme.css":1,"modules\/system\/system.admin.css":1,"misc\/ui\/jquery.ui.core.css":1,"misc\/ui\/jquery.ui.theme.css":1,"misc\/ui\/jquery.ui.button.css":1,"misc\/ui\/jquery.ui.resizable.css":1,"misc\/ui\/jquery.ui.dialog.css":1,"misc\/vertical-tabs.css":1,"modules\/comment\/comment.css":1,"modules\/field\/theme\/field.css":1,"modules\/node\/node.css":1,"modules\/user\/user.css":1,"sites\/all\/modules\/youtube\/css\/youtube.css":1,"sites\/all\/modules\/views\/css\/views.css":1,"sites\/all\/modules\/ckeditor\/css\/ckeditor.css":1,"sites\/all\/modules\/admin_menu\/admin_menu.css":1,"sites\/all\/modules\/admin_menu\/admin_menu.uid1.css":1,"sites\/all\/modules\/admin_menu\/admin_menu_toolbar\/admin_menu_toolbar.css":1,"modules\/shortcut\/shortcut.css":1,"sites\/all\/modules\/ctools\/css\/ctools.css":1,"sites\/all\/modules\/dhtml_menu\/dhtml_menu.css":1,"sites\/all\/modules\/term_reference_tree\/term_reference_tree.css":1,"sites\/all\/modules\/ckeditor\/css\/ckeditor.editor.css":1,"modules\/filter\/filter.css":1,"modules\/file\/file.css":1,"modules\/image\/image.css":1,"sites\/all\/modules\/ocupload\/static\/styles.css":1,"themes\/seven\/reset.css":1,"themes\/seven\/style.css":1,"themes\/seven\/ie.css":1,"themes\/seven\/ie7.css":1,"themes\/seven\/ie6.css":1}},"dhtmlMenu":{"nav":"bullet","animation":{"effects":{"height":"height","opacity":"opacity","width":0},"speed":"100"},"effects":{"siblings":"close-same-tree","children":"none","remember":"0"},"filter":{"type":"whitelist","list":{"menu-category":"menu-category","management":0,"navigation":0,"shortcut-set-1":0,"user-menu":0}}},"ckeditor":{"input_formats":{"filtered_html":{"customConfig":"\/sites\/all\/modules\/ckeditor\/ckeditor.config.js?","defaultLanguage":"ru","toolbar":"\n[\n    [\u0027Source\u0027],\n    [\u0027Cut\u0027,\u0027Copy\u0027,\u0027Paste\u0027,\u0027PasteText\u0027,\u0027PasteFromWord\u0027,\u0027-\u0027,\u0027SpellChecker\u0027, \u0027Scayt\u0027],\n    [\u0027Undo\u0027,\u0027Redo\u0027,\u0027Find\u0027,\u0027Replace\u0027,\u0027-\u0027,\u0027SelectAll\u0027],\n    [\u0027Image\u0027,\u0027Media\u0027,\u0027Flash\u0027,\u0027Table\u0027,\u0027HorizontalRule\u0027,\u0027Smiley\u0027,\u0027SpecialChar\u0027],\n    [\u0027Maximize\u0027, \u0027ShowBlocks\u0027],\n    \u0027\/\u0027,\n    [\u0027Format\u0027],\n    [\u0027Bold\u0027,\u0027Italic\u0027,\u0027Underline\u0027,\u0027Strike\u0027,\u0027-\u0027,\u0027Subscript\u0027,\u0027Superscript\u0027,\u0027-\u0027,\u0027RemoveFormat\u0027],\n    [\u0027NumberedList\u0027,\u0027BulletedList\u0027,\u0027-\u0027,\u0027Outdent\u0027,\u0027Indent\u0027,\u0027Blockquote\u0027],\n    [\u0027JustifyLeft\u0027,\u0027JustifyCenter\u0027,\u0027JustifyRight\u0027,\u0027JustifyBlock\u0027,\u0027-\u0027,\u0027BidiLtr\u0027,\u0027BidiRtl\u0027],\n    [\u0027Link\u0027,\u0027Unlink\u0027,\u0027Anchor\u0027,\u0027Linkit\u0027]\n]\n    ","enterMode":1,"shiftEnterMode":2,"toolbarStartupExpanded":true,"width":"100%","skin":"moono","format_tags":"p;div;pre;address;h1;h2;h3;h4;h5;h6","show_toggle":"t","ss":"2","loadPlugins":[],"entities":false,"entities_greek":false,"entities_latin":false,"scayt_autoStartup":false,"stylesCombo_stylesSet":"drupal:\/sites\/all\/modules\/ckeditor\/ckeditor.styles.js","contentsCss":["\/sites\/all\/modules\/ckeditor\/css\/ckeditor.css?n","\/sites\/all\/modules\/ckeditor\/ckeditor\/contents.css?n"]},"2":{"customConfig":"\/sites\/all\/modules\/ckeditor\/ckeditor.config.js?","defaultLanguage":"ru","toolbar":"[\n    [\u0027Source\u0027],\n    [\u0027Cut\u0027,\u0027Copy\u0027,\u0027Paste\u0027,\u0027PasteText\u0027,\u0027PasteFromWord\u0027,\u0027-\u0027,\u0027SpellChecker\u0027,\u0027Scayt\u0027],\n    [\u0027Undo\u0027,\u0027Redo\u0027,\u0027Find\u0027,\u0027Replace\u0027,\u0027-\u0027,\u0027SelectAll\u0027],\n    [\u0027Image\u0027,\u0027OCUpload\u0027,\u0027Flash\u0027,\u0027Table\u0027,\u0027HorizontalRule\u0027,\u0027Smiley\u0027,\u0027SpecialChar\u0027,\u0027Iframe\u0027],\n    \u0027\/\u0027,\n    [\u0027Bold\u0027,\u0027Italic\u0027,\u0027Underline\u0027,\u0027Strike\u0027,\u0027-\u0027,\u0027Subscript\u0027,\u0027Superscript\u0027,\u0027-\u0027,\u0027RemoveFormat\u0027],\n    [\u0027NumberedList\u0027,\u0027BulletedList\u0027,\u0027-\u0027,\u0027Outdent\u0027,\u0027Indent\u0027,\u0027Blockquote\u0027,\u0027CreateDiv\u0027],\n    [\u0027JustifyLeft\u0027,\u0027JustifyCenter\u0027,\u0027JustifyRight\u0027,\u0027JustifyBlock\u0027,\u0027-\u0027,\u0027BidiLtr\u0027,\u0027BidiRtl\u0027,\u0027-\u0027,\u0027Language\u0027],\n    [\u0027Link\u0027,\u0027Unlink\u0027,\u0027Anchor\u0027],\n    \u0027\/\u0027,\n    [\u0027Format\u0027,\u0027Font\u0027,\u0027FontSize\u0027],\n    [\u0027TextColor\u0027,\u0027BGColor\u0027],\n    [\u0027Maximize\u0027,\u0027ShowBlocks\u0027],\n    [\u0027DrupalBreak\u0027]\n]","enterMode":1,"shiftEnterMode":2,"toolbarStartupExpanded":true,"width":"100%","skin":"moono","format_tags":"p;div;pre;address;h1;h2;h3;h4;h5;h6","show_toggle":"t","ss":"2","loadPlugins":{"drupalbreaks":{"name":"drupalbreaks","desc":"Plugin for inserting Drupal teaser and page breaks.","path":"\/sites\/all\/modules\/ckeditor\/plugins\/drupalbreaks\/","buttons":{"DrupalBreak":{"label":"DrupalBreak","icon":"images\/drupalbreak.png"}},"default":"t"},"ocupload":{"name":"OCUpload","desc":"One Click Upload","path":"\/sites\/all\/modules\/ocupload\/static\/","buttons":{"OCUpload":{"icon":"button.png","label":"One Click Upload"}}}},"entities":false,"entities_greek":false,"entities_latin":false,"scayt_autoStartup":false,"filebrowserBrowseUrl":"\/imce?app=ckeditor%7Csendto%40ckeditor_imceSendTo%7C","stylesCombo_stylesSet":"drupal:\/sites\/all\/modules\/ckeditor\/ckeditor.styles.js","contentsCss":["\/sites\/all\/modules\/ckeditor\/css\/ckeditor.css?n","\/sites\/all\/modules\/ckeditor\/ckeditor\/contents.css?n"]}},"plugins":[],"textarea_default_format":{"edit-body-und-0-value":"2","edit-body-und-0-summary":"2"},"module_path":"\/sites\/all\/modules\/ckeditor","editor_path":"\/sites\/all\/modules\/ckeditor\/ckeditor\/","ajaxToken":"QdJWeXyP0vrUnMYa0Y5iLAhJihVFXbB4Scki4Z94w30","xss_url":"\/ckeditor\/xss","theme":"seven","elements":{"edit-body-und-0-value":"2","edit-body-und-0-summary":"2"},"autostart":{"edit-body-und-0-value":true,"edit-body-und-0-summary":true}},"file":{"elements":{"#edit-field-image-und-0-upload":"png,gif,jpg,jpeg"}},"ajax":{"edit-field-image-und-0-upload-button":{"wrapper":"edit-field-image-und-0-ajax-wrapper","effect":"fade","progress":{"type":"throbber","message":null},"event":"mousedown","keypress":true,"prevent":"click","url":"\/file\/ajax\/field_image\/und\/0\/form-_T4YAyeJYYZfXX4dIcQjCs_z5tZpMljjxnygcgPC-fA","submit":{"_triggering_element_name":"field_image_und_0_upload_button","_triggering_element_value":"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c"}}},"states":{"#edit-menu--2":{"invisible":{"input[name=\u0022menu[enabled]\u0022]":{"checked":false}}},"#edit-path-alias":{"!enabled":{"input[name=\u0022path[pathauto]\u0022]":{"checked":true}}},"#edit-revision":{"checked":{"textarea[name=\u0022log\u0022]":{"empty":false}}}},"anonymous":"\u0413\u043e\u0441\u0442\u044c","ocupload":{"phpsessid":"c753239544edc3e18ebaffb208457ddb","sizeLimit":8388608,"allowedExt":"*.jpg; *.jpeg; *.gif; *.png; *.rar; *.zip; *.doc; *.xls; *.webm; *.mp4; *.ogv;","modulePath":"\/sites\/all\/modules\/ocupload","uploadPath":"\/ocupload\/upload"},"tableHeaderOffset":"Drupal.admin.height","admin_menu":{"destination":"destination=node\/add\/story","hash":"3476f7f265e800451d11fb98d15062f0","basePath":"\/admin_menu","margin_top":1,"position_fixed":1,"toolbar":[]}});
//--><!]]>
</script>

В фаербаге показывает одну ошибку:
Uncaught TypeError: Cannot read property 'replace' of undefined
в dhtml_menu.js?neeytk:179

вот этот код:

    // When using LTR, all icons can be shifted as one, as the text width is not relevant.
    if (settings.nav == 'bullet' && !rtl) {
      // Shift overlay to the left by the width of the icon and the distance between icon and text.
179:      var shift = '-' + (Math.ceil(($('.menu li').css('margin-left').replace('px', ''))) + 16) + 'px';
      // Shift the overlay using a negative left-hand offset, and the text using a negative right-hand margin.
      $('.dhtml-menu-icon').css('left', shift).css('margin-right', shift);
    }

я не силен в js, подскажите, как эту строку исправить? или может быть просто убрать подключение, но я думаю что тогда могут возникнуть проблемы, если не исправить.
я пробовал в проверке писать так:

if ((settings.nav == 'bullet' && !rtl) and $('.dhtml-menu-icon')) {
if ((settings.nav == 'bullet' && !rtl) and self.$('.menu li')) {
if ((settings.nav == 'bullet' && !rtl) and Math.ceil(($('.menu li').css('margin-left').replace('px', ''))))) {
if ((settings.nav == 'bullet' && !rtl) and $('.menu li')) {

но всегда он жаловался что переменная не известна, и меню не работало, хотя админка тогда работала.
подскажите как правильно вставить в условие проверку наличия собственно меню, для которого выполнять замену буллета на картинку как в этом коде?
идея такова что 179 строка работает для меню с классом dhtml-menu или id dhtml-menu... и в админке такого меню нет ни одного. нужно видимо проверить наличие такого элемента, поищу сейчас как.

Комментарии

Аватар пользователя tlito tlito 2 ноября 2014 в 17:25

на удивление проверка наличия переменной не работала в первом if но работает во внутреннем if.
слуачайно решил проблему, но помогла немножко вот эта тема http://www.cyberforum.ru/javascript/thread1253306.html

в итоге патч для dhtml_menu.js с 177 строки такой:

    // When using LTR, all icons can be shifted as one, as the text width is not relevant.
    if (settings.nav == 'bullet' && !rtl) {
                //proverka nalichia smeshenia
                if (($('.menu li').css('margin-left'))){
      // Shift overlay to the left by the width of the icon and the distance between icon and text.
      var shift = '-' + (Math.ceil(($('.menu li').css('margin-left').replace('px', ''))) + 16) + 'px';
      // Shift the overlay using a negative left-hand offset, and the text using a negative right-hand margin.
      $('.dhtml-menu-icon').css('left', shift).css('margin-right', shift);
    }
    }
Аватар пользователя tlito tlito 3 ноября 2014 в 0:28

как не люблю я js и не понимаю, но повозившись я научился даже иконку открытия "папки" двигать, чтобы она была по центру, как и остальные точки. и более того, сообразил как обратиться к внутренним папкам, так как у них другой значок и соответственно двигать его надо тоже иначе.

этот код из dhtml_menu.js решает задачу позиционирования иконки раскрытия меню. Если у вас кнопка появляется не точно при наведении на иконку (bullet) или иконку нужно выровнять относительно других точек в меню, то вот тут вы найдете необходимые примеры

    // When using LTR, all icons can be shifted as one, as the text width is not relevant.
    if (settings.nav == 'bullet' && !rtl) {
                //proverka nalichia smeshenia
                if (($('.menu li').css('margin-left'))){
      // Shift overlay to the left by the width of the icon and the distance between icon and text.
      var shift = '-' + (Math.ceil(($('.menu li').css('margin-left').replace('px', ''))) + 20) + 'px';
      var shift2 =  (Math.ceil(($('.menu li').css('margin-left').replace('px', ''))) + 2) + 'px';
      var shift3 =  (Math.ceil(($('.menu li').children('ul').children('.dhtml-folder').css('margin-left').replace('px', ''))) + 4) + 'px';
      // Shift the overlay using a negative left-hand offset, and the text using a negative right-hand margin.
      $('.dhtml-menu-icon').css('left', shift).css('margin-right', shift);
      $('.dhtml-folder').css('margin-left', shift2);
      $('.dhtml-folder').children('a').css('margin-left', '-' + shift2);
      $('.dhtml-folder').children('ul').children('.dhtml-folder').css('margin-left', shift3);
      $('.dhtml-folder').children('ul').children('.dhtml-folder').children('a').css('margin-left', '-' + shift3);
      $('.dhtml-menu-icon').css('top', '3px').css('margin-top','3px');
    }  
    }

поясню: вначале выясняется, какие вообще стили margin-left, right предприняты к элементам и добавляется новое значение.
а потом двигается li и внутри него двигается a в другом направлении, чтобы позиционировать иконку, но вернуть на место сами буквы ссылки.
и то же применено для внутренних пунктов, которые отличаются другими стилями от верхних папок (у меня имеют другую иконку и другие расстояния отступа).

и также этот код содержит проверку наличия вообще такого меню, почему-то на одном сайте эта проверка была необходима, хотя на другом и без проверки все работало..
проблема решена.