8Dle
Авторизация

Проблема position:relative и dle_js.js в DLE 9.0-9.2

При вёрстке шаблонов для DLE я часто использую приём для размещения блоков на сайте с помощью position:relative; и position:absolute; - это очень удобный, семантически-правильный, валидный и т.д. способ решения сложных, на первый взгляд вариантов оформления.
Примером может служить тот же шаблон Turnion.
Но вот незадача: при использовании position: relative; для блоков, расположенных на странице (по расчётам браузера) ниже позиции top: 0px; (а это все блоки, кроме шапки) и являющихся родителем для комментариев, возникает очень неприятный "эффект" при добавлении, редактировании и удалении комментариев - страница прокручивается не до верха комментария, а до верха страницы.

А дело всё в том, что в DLE 9.2 в файле engine/classes/js/dle_js.js (для версии 9.0 это js_edit.js) есть функция scrollTop - это эффект прокрутки страницы до редактируемого, удаляемого или добавляемого комментария.
И функция эта использует для определения позиции текущего элемента функцию position(), которая получает значение позиции элемента top и left относительно отступов его предка., а так как у предка задано свойство position:relative; скрипт думает что его позиция top:0; left:0; и соответственно проматывает страницу в позицию top: 70; left: 0; что и даёт столь неприятный эффект прокрутки до начала страницы.

Я уже давно обещался заняться этой проблемой (когда даже толком и не знал чем она вызвана), и вот наконец, нашлось время.
Почитал документацию по jquery и легко нашёл альтернативную функцию определения позиции элемента - offset() - она получает текущие значения отступов относительно документа для первого элемента в наборе, что в нашем случаи более разумный подход, в принципе как и в любом другом.

Ну и подведя итог всему вышесказанному - инструкция по "излечению" этого бага будет выглядеть так:

- открываем engine/classes/js/dle_js.js (для версии 9.0 это js_edit.js) любым текстовым редактором (лучше notepad++);
- находим все вхождения position(), их будет 4 для DLE 9.2 (для DLE 9.0 - 3);
- заменяем все вхождения на offset();
- надеемся на то, что разработчики пофиксят эту проблему в новой версии DLE;

К сожалению, без правки кода движка эту проблему не решить никаким другим способом, кроме перевёрстки шаблона без использования position:relative.

Жмите на Кнопу ниже, или подписывайтесь!


Читайте также
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Надежно. Профессионально. Быстро. Судебный и до судебный возврат долгов
dengi-vzaimy.ru


Dle это движок который изначально проектировался для создания новостных сайтов, но по мере своего развития движка значительно расширил свою функциональность и стал универсальным средством разработки и сопровождения сайтов и блогов различной направленности и тематики. По сравнению с другими бесплатными (и некоторыми платными) CMS системами движок dle обладает довольно обширными возможности.

Авторизация