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

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

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

Комментарии

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

7 января 2014 в 10:41

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

7 января 2014 в 11:51

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

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

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

7 января 2014 в 15:05

"oleg220" wrote:

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

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

7 января 2014 в 11:56

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

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

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

7 января 2014 в 13:24

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

7 января 2014 в 14:44

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

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

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

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

7 января 2014 в 15:05

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

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

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

7 января 2014 в 16:12

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

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

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

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

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

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

7 января 2014 в 16:18

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

7 января 2014 в 16:35

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

9 января 2014 в 17:26

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

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

9 января 2014 в 17:43

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

14 января 2014 в 20:46

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

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

14 января 2014 в 20:55

Если бы я хоть что-нибудь понимал в этом :). Я способен только готовые модули настраивать и шаблоны в 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;
        });
}

14 января 2014 в 21:18

С кружочком частично решил проблему добавлением простого скрипта (ну, как простого, полтора дня ушло на его написание :)).
Правда, он на срабатывает при первом нажатии, а только при втором и т.д.
Я сделал в 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 По этому, у каждого из вас есть уникальная возможность помочь мне!

16 января 2014 в 17:34

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

В файле 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;
        });
}
16 января 2014 в 20:13

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

16 января 2014 в 20:25

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

16 января 2014 в 20:31

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

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

17 января 2014 в 1:39

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

17 января 2014 в 16:00

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

18 января 2014 в 11:11