Подскажите как правильней всего реализовать affiliate систему.
Если быть точней меня интересует чтобы на любой странице если в url на 3 позиции присутствует определённые хешы (из базы) то делать некие действия . При этом чтобы это работало в любом контроллере.
т.е.
mysite.com/about/me/*secret_affiliate*
mysite.com/site/add/*secret_affiliate*
Я сейчас пробовал это сделать методом того что использовал в роутинге свой класс который наследовал CBaseUrlRuled (как в мануале http://yiiframework.ru/doc/guide/ru/topics.url, последний абзац) в котором я переопределял метод parseUrl и в нём уже делал проверку из базы , но на выходе я должен возвращать строку с маршрутом и вот в этом загвоздка , так как у меня в роутах прописано много разных правил, а я имею на руках урл я не могу вернуть корректный маршрут.
Примерно так
пользователь заходит на страницу
mysite.com/about/secret_affiliate
в \protected\config\main.php
Код: Выделить всё
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
...
'about/me' => 'site/about',
'chek/this' => 'home/index',
'gal' => 'misc/gallery',
array(
'class' => 'application.components.CustomUrlRule',
'connectionID' => 'db',
),
...
в protected\components\CustomUrlRule.php
Код: Выделить всё
class IssuerUrlRule extends CBaseUrlRule
{
public function parseUrl($manager,$request,$pathInfo,$rawPathInfo) // в $pathInfo имеем /about/secret_affiliate
{
$uri = explode('/',$pathInfo);
if (is_array($uri) )
{
// проверяем в базе $uri[2] , если всё окей хотим вернуть маршрут - site/about' , но на руках имеем только /about/secret_affiliate
}
...
}