Исправил косячок с загрузкой изобажений в ThickBox

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

Аватар пользователя Химический Али Химический Али 3 ноября 2009 в 15:29

Проблема. после загрузки изображения модуль Image создает несколько деривативов (производных изображений) согласно пресетам (заданным настройкам). Иногда оригинальное загружаемое изображение меньше, чем некоторые деривативы и тогда эти деривативы не создаются. В таком случае при интеграции с модулем ThickBox последний пытается обращаться к несуществующему деривативу и в итоге пользователь видит лишь индикатор загрузки (ничего не происходит). Для решения проблемы можно было бы поискать зацепки-маркеры в генерируемом html-коде, но их нет. Ковырять для этого модуль Image мне было лень и я подрихтовал файл thickbox_auto.js.

Теперь перед активацией красивостей из thickbox заданный дериватив проверяется на наличие. В случае его отсутствия пользователю будет показан оригинал изображения.

Внимание, говнокод!

      var check_href = img.attr("src").replace(".thumbnail", "." + settings.derivative);
      var ch_flag = "";
      ch_flag = $.ajax({url:check_href, type:'HEAD', error: ch_flag = ""}).status;
      if (ch_flag == 404) {
        var href = img.attr("src").replace(".thumbnail", "");
      } else {
        var href = img.attr("src").replace(".thumbnail", "." + settings.derivative);
      };
      // А было так:
      //var href = img.attr("src").replace(".thumbnail", "." + settings.derivative);

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

Щас еще посмотрю первый раз в жизни на более популярный lightbox2.

Upd. Чуваки, юзайте лайтбокс - он сам все делает Biggrin

Комментарии