Php 如何在成功页面上获取原始推荐人url?
我有一个代码,它只在成功页面的head标签上执行。此代码用于跟踪买家是否来自佣金交接处 我需要将一个变量设置为true,如果原始推荐人来自commission junction附属链接,如下所示: 有没有一个简单的方法可以做到这一点 我在考虑推荐url,但我猜每次你从一个页面转到另一个页面时,变量都会发生变化:添加到购物车->账单地址->配送地址->付款->概览->成功 我的代码是Php 如何在成功页面上获取原始推荐人url?,php,magento,magento-1.7,php-5.3,magento-1.8,Php,Magento,Magento 1.7,Php 5.3,Magento 1.8,我有一个代码,它只在成功页面的head标签上执行。此代码用于跟踪买家是否来自佣金交接处 我需要将一个变量设置为true,如果原始推荐人来自commission junction附属链接,如下所示: 有没有一个简单的方法可以做到这一点 我在考虑推荐url,但我猜每次你从一个页面转到另一个页面时,变量都会发生变化:添加到购物车->账单地址->配送地址->付款->概览->成功 我的代码是 public function getCommissionJunctionUdo($orderId) {
public function getCommissionJunctionUdo($orderId) {
$order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
$udo = array();
$udo['CID'] = 'XXXX';
$udo['TYPE'] = 'XXXX';
$udo['CURRENCY'] = 'USD';
$udo['OID'] = $orderId;
$udo['DISCOUNT'] = number_format(abs($order->discount_amount),2);
$order_coupon_code = $order->coupon_code;
if(!is_null($order_coupon_code) && !empty($order_coupon_code)) {
$udo['COUPON'] = $order_coupon_code;
}
$udo['PRODUCTLIST'] = self::_getOrderProductsList($order);
if(referral url come from CJ)
{
$udo['FIRECJ'] = "TRUE";
}
else {
$udo['FIRECJ'] = "FALSE";
}
$masterTmsUdo['CJ'] = $udo;
$json_masterTmsUdo = json_encode($masterTmsUdo);
return $json_masterTmsUdo;
}
谢谢
$\u服务器['HTTP\u REFERER']
将为您提供REFERER页面的URL(如果存在)。试试看,下面试试
Mage::app()->getRequest()->getServer('HTTP_REFERER');
您可以观察事件
controller\u action\u predispatch
它将为magento中的每个页面发送。
然后,您可以检查
$\u服务器['HTTP\u REFERER']
(或者Mage::app()->getRequest()->getServer('HTTP\u REFERER')
,如果您希望“政治正确”)是否符合您的需要。如果是,则为会话设置一个值
Mage::getSingleton('core/session')->setComissionJunctionReferer(true);
然后,在您的签出页面中,您可以检查该值是否已设置
if (Mage::getSingleton('core/session')->getComissionJunctionReferer()) {
//your magic here
}
但是如果我从一个页面移动到另一个页面,那么在我网站的新页面中,它将拥有上一个页面,而不是原始的引用人?没错,所以尝试将其存储到会话变量中,例如,在第一次调用页面时,你知道它的形式是附属链接,它不是当前页面的引用人吗?或者整个会话?那么这不是我需要的,我需要的是用户在外部站点链接的当前辅助url。为什么控制器之前没有链接呢?我发现这个链接似乎非常有用,你同意这种方法吗?我只需要用您的代码更改captureReferral方法中的登录名。我不会在之前使用
controller\u front\u init\u
,因为在调度此事件时,magento还不知道它是在前端还是后端区域。它也将与该事件一起工作,但您的代码也将为管理部分运行。我认为你不需要这样。如果您使用controller\u action\u predispatch
,您可以声明您的观察者仅用于前端区域。示例看起来不错。这可能正是你所需要的。尝试一下,但如果不想在后端添加不必要的小开销,请更改事件。我如何声明观察器仅为前端部分运行?@L.V.。将
标记放在config.xml
中的
标记下,而不是
标记下。