Помощь Неправильно формируются ссылки после включения ЧПУ (SEF). Отблагодарю рублями на Webmoney.

Статус
В этой теме нельзя размещать новые ответы.

kira1992

Создатель
Регистрация
17 Май 2013
Сообщения
34
Реакции
11
Всем привет! Есть Джумла 3.6 и установленный на нее сторонний шаблон.
Проблема в том, что при включении ЧПУ (SEF) на сайте неправильно формируются ссылки на изображения, используемые плагином jQuery - lazy load (javascript).
Если отключить отображение префикса языка в адресной строке, то все нормально. Но если на мультиязычном сайте его включить, то ссылки формируются неправильно и мы получаем ошибку 404.
То есть на domain.com все изображения прекрасно отображаются,
а вот на domain.com/ru/ уже нет.
Все из-за того, что изображения находятся по адресу:
Для просмотра ссылки Войди или Зарегистрируйся
А вот на "домене с префиксом языка" ссылки на изображения почему-то имеют вид:
Для просмотра ссылки Войди или Зарегистрируйся
По этому адресу никаких изображений нет и не удивительно, что мы получаем 404.
Но это касается не всех изображений на сайте. Неправильная ссылка формируется ТОЛЬКО для изображений, которые используется lazy load:
<img data-original="templates/template/images/image1.jpg" src="templates/template/images/preload.gif class="lazy" />
Оригинальная ссылка на сайте не содержит префикс языка и как вы понимаете ее туда вставляет и формирует такую ссылку какой-то скрипт.
У меня подозрения, что возможно что-то не то в коде lazy load:
Код:
(function($, window, document, undefined) {
    var $window = $(window);

    $.fn.lazyload = function(options) {
        var elements = this;
        var $container;
        var settings = {
            threshold       : 0,
            failure_limit   : 0,
            event           : "scroll",
            effect          : "show",
            container       : window,
            data_attribute  : "original",
            skip_invisible  : true,
            appear          : null,
            load            : null,
            //placeholder     : "images/blank.gif"
        };

        function update() {
            var counter = 0;

            elements.each(function() {
                var $this = $(this);
                if (settings.skip_invisible && !$this.is(":visible")) {
                    return;
                }
//                if(settings.skip_invisible && $($this).parents('.isotope-item').hasClass('isotope-hidden')){ return; }
                if ($.abovethetop(this, settings) ||
                    $.leftofbegin(this, settings)) {
                        /* Nothing. */
                } else if (!$.belowthefold(this, settings) &&
                    !$.rightoffold(this, settings)) {
                        $this.trigger("appear");
                        /* if we found an image we'll load, reset the counter */
                        counter = 0;
                } else {
                    if (++counter > settings.failure_limit) {
                        return false;
                    }
                }
            });

        }

        if(options) {
            /* Maintain BC for a couple of versions. */
            if (undefined !== options.failurelimit) {
                options.failure_limit = options.failurelimit;
                delete options.failurelimit;
            }
            if (undefined !== options.effectspeed) {
                options.effect_speed = options.effectspeed;
                delete options.effectspeed;
            }

            $.extend(settings, options);
        }

        /* Cache container as jQuery as object. */
        $container = (settings.container === undefined ||
                      settings.container === window) ? $window : $(settings.container);

        /* Fire one scroll event per scroll. Not one scroll event per image. */
        if (0 === settings.event.indexOf("scroll")) {
            $container.bind(settings.event, function() {
                return update();
            });
        }

        this.each(function() {
            var self = this;
            var $self = $(self);

            self.loaded = false;

            /* If no src attribute given use data:uri. */
            if ($self.attr("src") === undefined || $self.attr("src") === false) {
                if ($self.is("img")) {
                    $self.attr("src", settings.placeholder);
                }
            }

            /* When appear is triggered load original image. */
            $self.one("appear", function() {
                if (!this.loaded) {
                    if (settings.appear) {
                        var elements_left = elements.length;
                        settings.appear.call(self, elements_left, settings);
                    }
                    $("<img />")
                        .bind("load", function() {

                            var original = $self.attr("data-" + settings.data_attribute);
                            $self.hide();
                            if ($self.is("img")) {
                                $self.attr("src", original);
                            } else {
                                $self.css("background-image", "url('" + original + "')");
                            }
                            $self[settings.effect](settings.effect_speed);

                            self.loaded = true;

                            /* Remove image from array so it is not looped next time. */
                            var temp = $.grep(elements, function(element) {
                                return !element.loaded;
                            });
                            elements = $(temp);

                            if (settings.load) {
                                var elements_left = elements.length;
                                settings.load.call(self, elements_left, settings);
                            }
                        })
                        .attr("src", $self.attr("data-" + settings.data_attribute));
                }
            });

            /* When wanted event is triggered load original image */
            /* by triggering appear.                              */
            if (0 !== settings.event.indexOf("scroll")) {
                $self.bind(settings.event, function() {
                    if (!self.loaded) {
                        $self.trigger("appear");
                    }
                });
            }
        });

        /* Check if something appears when window is resized. */
        $window.bind("resize", function() {
            update();
        });

        /* With IOS5 force loading images when navigating with back button. */
        /* Non optimal workaround. */
        if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {
            $window.bind("pageshow", function(event) {
                if (event.originalEvent && event.originalEvent.persisted) {
                    elements.each(function() {
                        $(this).trigger("appear");
                    });
                }
            });
        }

        /* Force initial check if images should appear. */
        $(document).ready(function() {
            update();
        });

        return this;
    };

    /* Convenience methods in jQuery namespace.           */
    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */

    $.belowthefold = function(element, settings) {
        var fold;

        if (settings.container === undefined || settings.container === window) {
            fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();
        } else {
            fold = $(settings.container).offset().top + $(settings.container).height();
        }

        return fold <= $(element).offset().top - settings.threshold;
    };

    $.rightoffold = function(element, settings) {
        var fold;

        if (settings.container === undefined || settings.container === window) {
            fold = $window.width() + $window.scrollLeft();
        } else {
            fold = $(settings.container).offset().left + $(settings.container).width();
        }

        return fold <= $(element).offset().left - settings.threshold;
    };

    $.abovethetop = function(element, settings) {
        var fold;

        if (settings.container === undefined || settings.container === window) {
            fold = $window.scrollTop();
        } else {
            fold = $(settings.container).offset().top;
        }

        return fold >= $(element).offset().top + settings.threshold  + $(element).height();
    };

    $.leftofbegin = function(element, settings) {
        var fold;

        if (settings.container === undefined || settings.container === window) {
            fold = $window.scrollLeft();
        } else {
            fold = $(settings.container).offset().left;
        }

        return fold >= $(element).offset().left + settings.threshold + $(element).width();
    };

    $.inviewport = function(element, settings) {
         return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&
                !$.belowthefold(element, settings) && !$.abovethetop(element, settings);
     };

    /* Custom selectors for your convenience.   */
    /* Use as $("img:below-the-fold").something() or */
    /* $("img").filter(":below-the-fold").something() which is faster */

    $.extend($.expr[":"], {
        "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); },
        "above-the-top"  : function(a) { return !$.belowthefold(a, {threshold : 0}); },
        "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); },
        "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); },
        "in-viewport"    : function(a) { return $.inviewport(a, {threshold : 0}); },
        /* Maintain BC for couple of versions. */
        "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
        "right-of-fold"  : function(a) { return $.rightoffold(a, {threshold : 0}); },
        "left-of-fold"   : function(a) { return !$.rightoffold(a, {threshold : 0}); }
    });

})(jQuery, window, document);



jQuery(function() {
     jQuery("img.lazy").lazyload({
         effect : "fadeIn"
     });
  });

Если тут есть люди знающие javascript, то подскажите какой код формирует эту ссылку и откуда она вообще берется?
Если она не в js, то где искать? index.php?
Буду благодарен любым подсказкам.
Если кто-то сильно поможет с подсказкой, то отблагодарю парой сотней рублей на Webmoney.
Решение тут скорее всего очень простое, но отсутствие знаний js не дает мне понять какую строку именно и в каком файле менять...
 
Последнее редактирование:
Ну вообще-то, оно правильно формирует url, как для многоязычности... какая галерея используется?
 
Ну вообще-то, оно правильно формирует url, как для многоязычности... какая галерея используется?
Fancybox (javascript) :
intiqamrahimov.com\templates\stamford\js\jquery.fancybox.pack.js

Где в таком случае может быть ошибка? Ведь префикса языка там в url быть не должно.
 
Попробуйте перекинуть изображения в папку медиа менеджера /images Она в корне сайта находится.

Потом посмотрите шаблон карусели где у вас вот это прописано <img data-original="templates/template/images/image1.jpg" src="templates/template/images/preload.gif". Там не должно быть жестких ссылок, они должны быть через PHP сформированы. У меня например в JoomShopping это так выглядит data-original="<?php print $product->image?>"
 
Fancybox (javascript) :
intiqamrahimov.com\templates\stamford\js\jquery.fancybox.pack.js

Где в таком случае может быть ошибка? Ведь префикса языка там в url быть не должно.
Где-то криво работает плагин с многоязычностью, стукни в ЛС, попробуем разобраться.
 
Попробуйте перекинуть изображения в папку медиа менеджера /images Она в корне сайта находится.

Потом посмотрите шаблон карусели где у вас вот это прописано <img data-original="templates/template/images/image1.jpg" src="templates/template/images/preload.gif". Там не должно быть жестких ссылок, они должны быть через PHP сформированы. У меня например в JoomShopping это так выглядит data-original="<?php print $product->image?>"
А какой смысл туда кидать, если все ссылку в другую папку ведут? Это шаблон такой. Я его не писал. Я сразу квик старт ставил и там уже на сайте везде такие ссылки были... Эти ссылки в модулях. То есть для каждого изображения в галерее отдельный модуль создается и там код такого вида:
<img data-original="templates/template/images/image1.jpg" src="templates/template/images/preload.gif class="lazy" />
Если префикса языка нет в адресной строке, то все замечательно работает.
Где-то криво работает плагин с многоязычностью, стукни в ЛС, попробуем разобраться.
Хорошо.
 
<img data-original="templates/template/images/image1.jpg" src="templates/template/images/preload.gif class="lazy" />
Путь к картинке не начинается с "/", значит он вычисляется относительно базового адреса который очевидно равен Для просмотра ссылки Войди или Зарегистрируйся.
Наверняка в head страницы есть <base href="Для просмотра ссылки Войди или Зарегистрируйся" />.
Путь к картинкам нужно указывать относительно корня сайта.
<img data-original="/templates/template/images/image1.jpg" src="/templates/template/images/preload.gif class="lazy" />
 
Путь к картинке не начинается с "/", значит он вычисляется относительно базового адреса который очевидно равен Для просмотра ссылки Войди или Зарегистрируйся.
Наверняка в head страницы есть <base href="Для просмотра ссылки Войди или Зарегистрируйся" />.
Путь к картинкам нужно указывать относительно корня сайта.
<img data-original="/templates/template/images/image1.jpg" src="/templates/template/images/preload.gif class="lazy" />
Спасибо за ответ. В head страницы нет <base href="Для просмотра ссылки Войди или Зарегистрируйся" />, но это натолкнуло меня на мыль, что так и должно быть. Наверняка Джумла просто подставляет туда код языка и поэтому ссылки так формируются.
Единственно не понятно почему не все ссылки на изображения становятся такими, а только те, для которых прописан data-original и/или class="lazy". То есть если их убрать, то ссылки становятся нормальными. Возможно все же где-то еще в шаблоне указан такой путь. Может это со скприптами jQuery связано...
Но вы правы... Это не совсем решение проблемы т.к. не нашелся скрипт, который формирует такую ссылку, но придется наверное все ссылки на сайте просто вручную отредактировать, поставив спереди /
Проверьте ЛС.

Решено. Тема более не актуальна. Просто отредактирую все ссылки, хоть и вручную это долго делать...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху