Кружок загрузки постоянно крутится. Как убрать?

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

Аватар пользователя oleg220 oleg220 6 января 2014 в 16:21

Привет. Вот смастерил фильтры при помощи better exposed filters. Выбираю нужные значения, нажимаю кнопку "Применить", получаю результат. Но, при этом у кнопки постоянно крутиться кружок загрузки. Нажимаю кнопку ещё раз, кружок снова появляется, и так хоть 10 раз тыкай, постоянно появляются новые. Вот пример http://mir-otparivatelei.ru/vertikalnye-otparivateli
Есть конечно вариант просто скрыть его в CSS, но, тогда пользователь будет думать, произошло что-то или нет. хотелось бы, чтобы кружок после загрузки результатов сам пропадал.
Как это починить? Подскажите, пожалуйста.

Комментарии

Аватар пользователя oleg220 oleg220 7 января 2014 в 10:41

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

Аватар пользователя oleg220 oleg220 7 января 2014 в 11:51

Да, я пробовал скрывать. Скрывается, но это не юзабильно для посетителя получается. Будет тыкать на кнопку и думать, сработало или нет.

Аватар пользователя roman-yrv roman-yrv 7 января 2014 в 15:05

А если сделать таким образом ...

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

И всё... И функционал не нужно перелопачивать, и пользователю видно, что что-то работает ...

Аватар пользователя ttenz ttenz 7 января 2014 в 11:56

"oleg220" wrote:

не, норм, у меня кмгновенно работает, кружок не к чему

единственно поработай над страницей - нет результата или убери возможность выбора пустого

Аватар пользователя foreach foreach 7 января 2014 в 13:24

Забавно наблюдать как каждые 5-6 секунд клиент у вас дергает сервер.
Когда элементов к сравнению нет, дергается 150B.
Если они есть вы получите цифру больше.

И с флагами у вас беда.

Вы вообще сравнение тестировали ?

Аватар пользователя oleg220 oleg220 7 января 2014 в 14:44

Да, тестировал сравнение. НИкаких вроде проблем не наблюдал.
Про нагрузку понимаю, что она есть, но не знаю, на сколько она критична. Сейчас посещаемость сайта 150-200 человек в сутки. Потолок для сайта такой узкой тематики человек 500 в день.
Если Вы подскажете, как решить проблему с обновлением блока сравнения, скажу (напишу) Вам душевное спасибо Smile

Аватар пользователя foreach foreach 7 января 2014 в 15:05

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

Да и перед перезагрузкой, реакция на кнопку медленная.

Обновлять блок нужно при клике, а не по таймеру.

Вероятно вам было просто дешевле собрать так, нежели иначе.
Вы ведь не хозяин, верно ?

Аватар пользователя oleg220 oleg220 7 января 2014 в 16:12

"foreach" wrote:
Вы ведь не хозяин, верно ?

Нет, не верно, я и хозяин и разработчик, и жнец, и чтец, и на дуде игрец Smile На что хватило умений, так и сделал.
Функционал собран на стандартных модулях, что есть в свободном доступе. Писать что-то сам, к сожалению, не умею.
После перезагрузки страницы да, медленно. Наверное скрипты подгружаются. Не знаю, реально ли это исправить и имеет ли вообще смысл. Врятли хоть кто-то из реальных посетителей попадает на страницу и сразу же кликает на ссылку сравнения.
Обновлять блок по клику отличная идея. Жаль, стандартные средства не позволяют это делать Sad Поищу варианты, может найду что-нибудь.
"roman-yrv" wrote:
Подключить jquery-скрипт, который по нажатию на кнопку "Применить" будет просто запускать таймер

Тоже хорошая идея, тоже буду искать, как это делается, изучать всякие там jquery и как их к ссылке прикрутить Smile

Аватар пользователя foreach foreach 7 января 2014 в 16:18

"oleg220" wrote:
После перезагрузки страницы да, медленно. Наверное скрипты подгружаются.

Не после перезагрузки, а при любом клике по ссылке будет пауза до момента обновления блока.

После перезагрузки не верно отображаются ссылки.

Перечитайте комментарий снова.

А что касается предложенного варианта с jquery, так это "великолепный" костыль для костыля.

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

Аватар пользователя oleg220 oleg220 7 января 2014 в 16:35

roman-yrv предложил jquery как вариант нормальной работы кружочка загрузки (чтобы он пропадал через секунду, а не крутился вечно). У Вас есть другая идея по этому пункту?

Аватар пользователя oleg220 oleg220 9 января 2014 в 17:26

Что то никак не могу найти, как же сделать так, чтобы при клике по ссылке флага автоматически обновлялся блок сравнения Sad Может подскажет что?

Аватар пользователя roman-yrv roman-yrv 9 января 2014 в 17:43

Если обновлять часть страницы без её перезагрузки, то либо с помощью JQuery + AJAX, либо можно воспользоваться Drupal AJAX Framework.

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

Аватар пользователя oleg220 oleg220 14 января 2014 в 20:46

Вернёмся к нашим баранам.
Модуль, который обновляет содержимое блока через заданное количество секунд может так же обновлять блок по нажатию на ссылку (в самом блоке ссылка появляется).
Но, как сделать, чтобы обновлялся блок при нажатии ссылок "Сравнить" и "Убрать из сравнения"?
Может как-то можно через JQuery с имитировать нажатие ссылки обновления при нажатии на ссылку сравнения?

<div id="block-views-compare-block_1" class="block block-views even  last grid16-4">
<div id="block-refresh-button-block-views-compare-block_1" class="block-refresh-button">
<a href="test">Refresh</a>
</div>
Текст блока.
</div>

<script type="text/javascript">
<!--//--><![CDATA[//><!--
$(document).ready(function() {
  block_refresh_add_button('block-views-compare-block_1', '/block_refresh/views/compare-block_1', '#block-views-compare-block_1 .content');
})
//--><!]]>
</script>

И есть доступ к темизации ссылки сравнения в файле flag.tpl.php

Может можно в этом файле какую-нибудь штуковину написать, чтобы эта штуковина нажимала на ссылку Refresh при нажатии ссылки сравнить?

Аватар пользователя roman-yrv roman-yrv 14 января 2014 в 20:55

Посмотрите в исходниках js-файла данного модуля, какая функция производит обновление блока.
Вот эту функцию и вызывайте по нажатию данных ссылок.

А шаблоны *.tpl.php лучше в данном случае не трогать, оформите jquery в виде отдельного js-файла, который пристыкуйте к своей теме.

Аватар пользователя oleg220 oleg220 14 января 2014 в 21:18

Если бы я хоть что-нибудь понимал в этом :). Я способен только готовые модули настраивать и шаблоны в html делать, а всё остальное для меня темный лес :(.

Думаю, что обновляет блок вот эта часть (верхняя, а нижняя кнопку добавляет, так по крайней мере написано в примечании):

function block_refresh_all() {
        for (div in _block_refresh_data) {
                block_refresh(div);
        }
}

// this will add a button to the div, just below the header...
function block_refresh_add_button(div, url, content) {
        _block_manual_data[div] = new block_refresh_data(content, url);
        output = '<div id="block-refresh-button-' + div + '" class="block-refresh-button"><a href="test">Refresh</a></div>';
        $('#' + div).prepend(output);
        $('#block-refresh-button-' + div).click( function() {
                block_refresh_manual(div);
                return false;
        });
}

Аватар пользователя oleg220 oleg220 16 января 2014 в 17:34

С кружочком частично решил проблему добавлением простого скрипта (ну, как простого, полтора дня ушло на его написание :)).
Правда, он на срабатывает при первом нажатии, а только при втором и т.д.
Я сделал в CSS стиль кружочка по умолчанию скрытым:

html.js a.views-throbbing, html.js span.views-throbbing {
position: absolute;
right: 50px;
bottom: 20px;
display: none;
}

Затем при клике этому кружочку присваивается стиль "display: block;" а через 3 секунды при помощи fadeOut(3000) кружок плавно исчезает.

<script type="text/javascript">
$(document).ready(function (){
    $('#edit-submit-advanced-catalog').click(function (){
        $('span[class="views-throbbing"]').attr("style", "display: block;").fadeOut(3000);
    });
});
</script>

При первом нажатии не срабатывает видимо потому, что span с кружочком появляется в коде страницы после срабатывания скрипта затухания.
Долго мучился, искал возможность задержки срабатывания скрипта и нашёл - .delay(2000). Однако, оказывается эта фигня работает тока на версии jquery 1.4 и старше. Друпал же для всех своих примочек использует древний 1.3.2.
При помощи dev версии модуля jquery udate я конечно попробовал обновить до версии 1.7, но, как раз эти фильтры работают с ним криво. После 2-го 3-го нажатия страница уже не грузится через ajax, а перекидывает на главную (у меня каталог на главной тоже через views сделан, через страницу).

Но, думаю и мой вариант тоже может жить. Ведь человек нажмёт на кнопку, и если он засомневается в том, сработал ли фильтр, он поступит логично и тыкнет ещё раз Smile

А вот с автоматическим обновлением блока сравнения я так ничего и не решил Sad По этому, у каждого из вас есть уникальная возможность помочь мне!

Аватар пользователя oleg220 oleg220 16 января 2014 в 20:13

ХА. Я сделал обновление блока при клике. Оказывается, всё довольно просто, когда уже разобрался с кружочком. Тут уже всё по аналогии.

В файле block_refresh.js заменяем

// this will add a button to the div, just below the header...
function block_refresh_add_button(div, url, content) {
        _block_manual_data[div] = new block_refresh_data(content, url);
        output = '<div id="block-refresh-button-' + div + '" class="block-refresh-button"><a href="test">Refresh</a></div>';
        $('#' + div).prepend(output);
        $('#block-refresh-button-' + div).click( function() {
                block_refresh_manual(div);
                return false;
        });
}

на

// this will add a button to the div, just below the header...
function block_refresh_add_button(div, url, content) {
        _block_manual_data[div] = new block_refresh_data(content, url);
        output = '<div id="block-refresh-button-' + div + '" class="block-refresh-button"><a href="test">Refresh</a></div>';
        $('#' + div).prepend(output);
        $('.flag-link-toggle').click( function() {
                block_refresh_manual(div);
                return false;
        });
}
Аватар пользователя oleg220 oleg220 16 января 2014 в 20:25

А нет, какой то глюк. Почему то клик срабатывает только один раз Sad Тыкаю "Сравнить" и если потом по ней же тыкнуть "убрать из сравнения", то обновление блока уже не срабатывает. Но, можно на другие ссылки тыкать. В общем, каждая ссылка флага обновляет блок только 1 раз Sad

Аватар пользователя oleg220 oleg220 16 января 2014 в 20:31

Кажется, понимаю, в чём тут проблема. Она такая же, как с тем, что появление кружочка не срабатывает с первого раза.
Когда первый раз кликаешь, то кликаешь по существующей ссылке. После этого ссылка меняется - назовём её виртуальной ссылкой. И вот когда уже по этой виртуальной ссылке тыкаешь, то скрипт не работает Sad
Как побороть проблему?

Аватар пользователя foreach foreach 17 января 2014 в 1:39

Прекратите кликать, тыкать и создавать виртуальные ссылки )))

Вы разве не замечаете, что пытаетесь написать костыль для костыля ?

Аватар пользователя oleg220 oleg220 17 января 2014 в 16:00

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

Аватар пользователя oleg220 oleg220 18 января 2014 в 11:11

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