如何重定向到特定的URL



我正在使用新期刊主题3运行Opecart 3。产品页面具有"快速购买"按钮,该按钮会自动将产品详细信息添加到购物车中,然后将客户重定向到结帐页面。

我似乎无法更改quick_buy按钮的URL。我需要它做上述内容,而是将用户重定向到自定义URL。

我该如何实现?

代码如下所示:

// Array includes polyfill
if (!Array.prototype.includes) {
    Object.defineProperty(Array.prototype, 'includes', {
        value: function (searchElement, fromIndex) {
            if (this == null) {
                throw new TypeError('"this" is null or not defined');
            }
            // 1. Let O be ? ToObject(this value).
            var o = Object(this);
            // 2. Let len be ? ToLength(? Get(O, "length")).
            var len = o.length >>> 0;
            // 3. If len is 0, return false.
            if (len === 0) {
                return false;
            }
            // 4. Let n be ? ToInteger(fromIndex).
            //    (If fromIndex is undefined, this step produces the value 0.)
            var n = fromIndex | 0;
            // 5. If n ≥ 0, then
            //  a. Let k be n.
            // 6. Else n < 0,
            //  a. Let k be len + n.
            //  b. If k < 0, let k be 0.
            var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
            function sameValueZero(x, y) {
                return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
            }
            // 7. Repeat, while k < len
            while (k < len) {
                // a. Let elementK be the result of ? Get(O, ! ToString(k)).
                // b. If SameValueZero(searchElement, elementK) is true, return true.
                if (sameValueZero(o[k], searchElement)) {
                    return true;
                }
                // c. Increase k by 1.
                k++;
            }
            // 8. Return false
            return false;
        }
    });
}
$(function () {
    // Currency
    $('#form-currency .currency-select').unbind().on('click', function (e) {
        e.preventDefault();
        $('#form-currency input[name='code']').val($(this).data('name'));
        $('#form-currency').submit();
    });
    // Language
    $('#form-language .language-select').unbind().on('click', function (e) {
        e.preventDefault();
        $('#form-language input[name='code']').val($(this).data('name'));
        $('#form-language').submit();
    });
});
window['cart'].add = function (product_id, quantity, quick_buy) {
    quantity = quantity || 1;
    $.ajax({
        url: 'index.php?route=checkout/cart/add',
        type: 'post',
        data: 'product_id=' + product_id + '&quantity=' + quantity,
        dataType: 'json',
        beforeSend: function () {
            $('[data-toggle="tooltip"]').tooltip('hide');
            $('[onclick*="cart.add('' + product_id + ''"]').button('loading');
        },
        complete: function () {
            $('[onclick*="cart.add('' + product_id + ''"]').button('reset');
        },
        success: function (json) {
            $('.alert, .text-danger').remove();
            if (json['redirect']) {
                if (json['options_popup']) {
                    if ($('html').hasClass('iphone') || $('html').hasClass('ipad')) {
                        iNoBounce.enable();
                    }
                    var html = '';
                    html += '<div class="popup-wrapper popup-options">';
                    html += '    <div class="popup-container">';
                    html += '        <button class="btn popup-close"></button>';
                    html += '        <div class="popup-body">';
                    html += '        <div class="popup-inner-body">';
                    html += '            <div class="journal-loading"><i class="fa fa-spinner fa-spin"></i></div>';
                    html += '            <iframe src="index.php?route=journal3/product&product_id=' + product_id + '&popup=options&product_quantity=' + quantity + '&' + (quick_buy ? 'quick_buy=true' : '') + '" width="100%" height="100%" frameborder="0" onload="this.height = this.contentWindow.document.body.offsetHeight; $(this).prev('.journal-loading').fadeOut();"></iframe>';
                    html += '        </div>';
                    html += '        </div>';
                    html += '    </div>';
                    html += '    <div class="popup-bg popup-bg-closable"></div>';
                    html += '</div>';
                    // show modal
                    $('.popup-wrapper').remove();
                    $('body').append(html);
                    setTimeout(function () {
                        $('html').addClass('popup-open popup-center');
                    }, 10);
                } else {
                    location = json['redirect'];
                }
            }
            if (json['success']) {
                if (json['options_popup']) {
                    if ($('html').hasClass('iphone') || $('html').hasClass('ipad')) {
                        iNoBounce.enable();
                    }
                    var html = '';
                    html += '<div class="popup-wrapper popup-options">';
                    html += '    <div class="popup-container">';
                    html += '        <button class="btn popup-close"></button>';
                    html += '        <div class="popup-body">';
                    html += '        <div class="popup-inner-body">';
                    html += '            <div class="journal-loading"><i class="fa fa-spinner fa-spin"></i></div>';
                    html += '            <iframe src="index.php?route=journal3/product&product_id=' + product_id + '&popup=options&' + (quick_buy ? 'quick_buy=true' : '') + '" width="100%" height="100%" frameborder="0" onload="this.height = this.contentWindow.document.body.offsetHeight; $(this).prev('.journal-loading').fadeOut();"></iframe>';
                    html += '        </div>';
                    html += '        </div>';
                    html += '    </div>';
                    html += '    <div class="popup-bg popup-bg-closable"></div>';
                    html += '</div>';
                    // show modal
                    $('.popup-wrapper').remove();
                    $('body').append(html);
                    setTimeout(function () {
                        $('html').addClass('popup-open popup-center');
                    }, 10);
                } else {
                    if (json['notification']) {
                        show_notification(json['notification']);
                        if (quick_buy) {
                            location = 'index.php?route=checkout/checkout';
                        }
                    } else {
                        $('header').after('<div class="alert alert-success"><i class="fa fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="close" data-dismiss="alert">&times;</button></div>');
                    }
                }
                // Need to set timeout otherwise it wont update the total
                setTimeout(function () {
                    $('#cart-total').html(json['total']);
                    $('#cart-items').html(json['items_count']);
                }, 100);
                if (Journal['scrollToTop']) {
                    $('html, body').animate({ scrollTop: 0 }, 'slow');
                }
                $('.cart-content ul').load('index.php?route=common/cart/info ul li');
                if (parent.window['_QuickCheckout']) {
                    parent.window['_QuickCheckout'].save();
                }
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError + 'rn' + xhr.statusText + 'rn' + xhr.responseText);
        }
    });
};
window['cart'].remove = function (key) {
    $.ajax({
        url: 'index.php?route=checkout/cart/remove',
        type: 'post',
        data: 'key=' + key,
        dataType: 'json',
        beforeSend: function () {
            $('#cart > button').button('loading');
        },
        complete: function () {
            $('#cart > button').button('reset');
        },
        success: function (json) {
            // Need to set timeout otherwise it wont update the total
            setTimeout(function () {
                $('#cart-total').html(json['total']);
                $('#cart-items').html(json['items_count']);
            }, 100);
            if ($('html').hasClass('route-checkout-cart') || $('html').hasClass('route-checkout-checkout')) {
                location = 'index.php?route=checkout/cart';
            } else {
                $('.cart-content ul').load('index.php?route=common/cart/info ul li');
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError + 'rn' + xhr.statusText + 'rn' + xhr.responseText);
        }
    });
};
window['cart'].update = function (key, quantity) {
    $.ajax({
        url: 'index.php?route=checkout/cart/edit',
        type: 'post',
        data: 'key=' + key + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1),
        dataType: 'json',
        beforeSend: function () {
            $('#cart > button').button('loading');
        },
        complete: function () {
            $('#cart > button').button('reset');
        },
        success: function (json) {
            // Need to set timeout otherwise it wont update the total
            setTimeout(function () {
                $('#cart-total').html(json['total']);
                $('#cart-items').html(json['items_count']);
            }, 100);
            if ($('html').hasClass('route-checkout-cart') || $('html').hasClass('route-checkout-checkout')) {
                location = 'index.php?route=checkout/cart';
            } else {
                $('.cart-content ul').load('index.php?route=common/cart/info ul li');
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError + 'rn' + xhr.statusText + 'rn' + xhr.responseText);
        }
    });
};
window['wishlist'].add = function (product_id) {
    $.ajax({
        url: 'index.php?route=account/wishlist/add',
        type: 'post',
        data: 'product_id=' + product_id,
        dataType: 'json',
        success: function (json) {
            $('.alert').remove();
            if (json['redirect']) {
                location = json['redirect'];
            }
            if (json['success']) {
                $('[data-toggle="tooltip"]').tooltip('hide');
                if (json['notification']) {
                    show_notification(json['notification']);
                } else {
                    $('header').after('<div class="alert alert-success"><i class="fa fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="close" data-dismiss="alert">&times;</button></div>');
                }
            }
            $('#wishlist-total span').html(json['total']);
            $('#wishlist-total').attr('title', json['total']);
            $('.wishlist-badge').text(json['count']);
            if (Journal['scrollToTop']) {
                $('html, body').animate({ scrollTop: 0 }, 'slow');
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError + 'rn' + xhr.statusText + 'rn' + xhr.responseText);
        }
    });
};
window['compare'].add = function (product_id) {
    $.ajax({
        url: 'index.php?route=product/compare/add',
        type: 'post',
        data: 'product_id=' + product_id,
        dataType: 'json',
        success: function (json) {
            $('.alert').remove();
            if (json['success']) {
                $('[data-toggle="tooltip"]').tooltip('hide');
                if (json['notification']) {
                    show_notification(json['notification']);
                } else {
                    $('header').after('<div class="alert alert-success"><i class="fa fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="close" data-dismiss="alert">&times;</button></div>');
                }
                $('#compare-total').html(json['total']);
                $('.compare-badge').text(json['count']);
                if (Journal['scrollToTop']) {
                    $('html, body').animate({ scrollTop: 0 }, 'slow');
                }
            }
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError + 'rn' + xhr.statusText + 'rn' + xhr.responseText);
        }
    });
};
window['quickview'] = function (product_id) {
    product_id = parseInt(product_id, 10);
    // hide tooltip
    $('[data-toggle="tooltip"]').tooltip('hide');
    var html = '';
    html += '<div class="popup-wrapper popup-quickview">';
    html += '    <div class="popup-container">';
    html += '        <button class="btn popup-close"></button>';
    html += '        <div class="popup-body">';
    html += '            <div class="popup-inner-body">';
    html += '                <div class="journal-loading"><i class="fa fa-spinner fa-spin"></i></div>';
    html += '                <iframe src="index.php?route=journal3/product&product_id=' + product_id + '&popup=quickview" width="100%" height="100%" frameborder="0" onload="this.height = this.contentWindow.document.body.offsetHeight; $(this).prev('.journal-loading').hide();"></iframe>';
    html += '            </div>';
    html += '        </div>';
    html += '    </div>';
    html += '    <div class="popup-bg popup-bg-closable"></div>';
    html += '</div>';
    // show modal
    $('.popup-wrapper').remove();
    $('body').append(html);
    setTimeout(function () {
        $('html').addClass('popup-open popup-center');
    }, 10);
};
window['open_popup'] = function (module_id) {
    if ($('html').hasClass('iphone') || $('html').hasClass('ipad')) {
        iNoBounce.enable();
    }
    module_id = parseInt(module_id, 10);
    var html = '';
    html += '<div class="popup-wrapper popup-module">';
    html += '    <div class="popup-container">';
    html += '        <button class="btn popup-close"></button>';
    html += '        <div class="popup-body">';
    html += '        <div class="popup-inner-body">';
    html += '        </div>';
    html += '        </div>';
    html += '    </div>';
    html += '    <div class="popup-bg popup-bg-closable"></div>';
    html += '</div>';
    // show modal
    $('.popup-wrapper').remove();
    $('body').append(html);
    setTimeout(function () {
        $('html').addClass('popup-open popup-center');
    }, 10);
    $('.popup-container').css('visibility', 'hidden');
    $.ajax({
        url: 'index.php?route=journal3/popup/get&module_id=' + module_id + '&popup=module',
        success: function (html) {
            var $html = $(html);
            var $popup = $html.siblings('.module-popup');
            var $style = $html.siblings('style');
            var $content = $popup.find('.popup-container');
            $('#popup-style-' + module_id).remove();
            $('head').append($style.attr('id', 'popup-style-' + module_id));
            $('.popup-wrapper').attr('class', $popup.attr('class'));
            $('.popup-container').html($content.html());
            $('.popup-container').css('visibility', 'visible');
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError + 'rn' + xhr.statusText + 'rn' + xhr.responseText);
        }
    });
};
window['open_login_popup'] = function () {
    if ($('html').hasClass('iphone') || $('html').hasClass('ipad')) {
        iNoBounce.enable();
    }
    var html = '';
    html += '<div class="popup-wrapper popup-login">';
    html += '    <div class="popup-container">';
    html += '        <button class="btn popup-close"></button>';
    html += '        <div class="popup-body">';
    html += '        <div class="popup-inner-body">';
    html += '            <div class="journal-loading"><i class="fa fa-spinner fa-spin"></i></div>';
    html += '            <iframe src="index.php?route=account/login&popup=login" width="100%" height="100%" frameborder="0" onload="this.height = this.contentWindow.document.body.offsetHeight; $(this).prev('.journal-loading').fadeOut();"></iframe>';
    html += '        </div>';
    html += '        </div>';
    html += '    </div>';
    html += '    <div class="popup-bg popup-bg-closable"></div>';
    html += '</div>';
    // show modal
    $('.popup-wrapper').remove();
    $('body').append(html);
    setTimeout(function () {
        $('html').addClass('popup-open popup-center');
    }, 10);
};
window['open_register_popup'] = function () {
    if ($('html').hasClass('iphone') || $('html').hasClass('ipad')) {
        iNoBounce.enable();
    }
    var html = '';
    html += '<div class="popup-wrapper popup-register">';
    html += '    <div class="popup-container">';
    html += '        <button class="btn popup-close"></button>';
    html += '        <div class="popup-body">';
    html += '        <div class="popup-inner-body">';
    html += '            <div class="journal-loading"><i class="fa fa-spinner fa-spin"></i></div>';
    html += '            <iframe src="index.php?route=account/register&popup=register" width="100%" height="100%" frameborder="0" onload="this.height = this.contentWindow.document.body.offsetHeight; $(this).prev('.journal-loading').fadeOut();"></iframe>';
    html += '        </div>';
    html += '        </div>';
    html += '    </div>';
    html += '    <div class="popup-bg popup-bg-closable"></div>';
    html += '</div>';
    // show modal
    $('.popup-wrapper').remove();
    $('body').append(html);
    setTimeout(function () {
        $('html').addClass('popup-open popup-center');
    }, 10);
};
window['show_notification'] = function (opts) {
    opts = $.extend({
        position: 'center',
        className: '',
        title: '',
        image: '',
        message: '',
        buttons: [],
        timeout: Journal.notificationHideAfter
    }, opts);
    if ($('.notification-wrapper-' + opts.position).length === 0) {
        $('body').append('<div class="notification-wrapper notification-wrapper-' + opts.position + '"></div>');
    }
    var html = '';
    var buttons = $.map(opts.buttons, function (button) {
        return '<a class="' + button.className + '" href="' + button.href + '">' + button.name + '</a>';
    });
    html += '<div class="notification ' + opts.className + '">';
    html += '    <button class="btn notification-close"></button>';
    html += '    <div class="notification-content">';
    if (opts.image) {
        html += '        <img src="' + opts.image + '" srcset="' + opts.image + ' 1x, ' + opts.image2x + ' 2x">';
    }
    html += '        <div>';
    html += '            <div class="notification-title">' + opts.title + '</div>';
    html += '            <div class="notification-text">' + opts.message + '</div>';
    html += '        </div>';
    html += '    </div>';
    if (buttons && buttons.length) {
        html += '<div class="notification-buttons">' + buttons.join('n') + '</div>';
    }
    html += '</div>';
    var $notification = $(html);
    $('.notification-wrapper-' + opts.position).append($notification);
    if (opts.timeout) {
        setTimeout(function () {
            $notification.find('.notification-close').trigger('click');
        }, opts.timeout);
    }
    return $notification;
};
window['loader'] = function (el, status) {
    var $el = $(el);
    if (status) {
        $el.attr('style', 'position: relative');
        $el.append('<div class="journal-loading-overlay"><div class="journal-loading"><i class="fa fa-spinner fa-spin"></i></div></div>');
    } else {
        $el.attr('style', '');
        $el.find('.journal-loading-overlay').remove();
    }
};
window['resize_iframe'] = function (module_id, height) {
    $('.module-popup-' + module_id + ' iframe').height(height);
};

从代码提供的我可以看到,只有一种真正重定向的方法,那就是 window['cart'].add

显然,此代码负责重定向

location = 'index.php?route=checkout/checkout';

然而,此后任何地方都没有使用location。所以这是一个死胡同。

日记是我知道的最神秘的框架之一,因此对我来说也就不足为奇了。这是我会做的。

  1. 将此location参数编辑为自定义链接,例如location = 'index.php?route=product/special';
  2. 清除树枝缓存,以便我们确定发生更改
  3. 如果那不起作用,请检查方法add中的catalog/controller/checkout/cart的控制器文件,然后查看是否有自定义重定向。
  4. 请记住检查system/storage/modification/...中的修改文件中的controller/checkout/cart.php和TWIG view/theme/.../...twig

我希望我能够朝着正确的方向推动您。

感谢您的帮助!我在

中发现了罪魁祸首

/catalog/view/theme/journal3/template/product/product.twig

    if ($btn.data('quick-buy') !== undefined) {
      location = 'this-location-here';
    }

相关内容

  • 没有找到相关文章

最新更新