Заказчик придумал новую проблему, считать клики по баннерам, ну а баннеры понятное дело просто выводятся с помощью ditto.
Делать страничку с редиректом было скучно, соорудил следующую конструкцию:
В шаблоне ditto, добавил к ссылками параметр rel с id ресурса, вот так:
<a href="..." rel="[+id+]" >...</a>
Написал небольшой код на jquery (Здесь adverts — id контейнера с баннерами, /c.html — адрес страницы со сниппетом ):
$("#adverts a").each ( function () {
var link = $(this);
link.click(function () {
$.get( '/c.html', { id: link.attr('rel') }, function() { window.location = link.attr('href'); } );
return false;
} );
})
А по адресу /c.html вставил такой сниппет:
<?php
if ((int)$_GET['id']>0) {
$docid = $_GET['id'];
$field = $modx->getTemplateVar('counter', '', $docid );
$id = $field['id'];
$counter = $field['value'];
if ((int)$counter != 0 ) { $counter++; } else { $counter = 1; }
$tvc = $modx->getFullTableName('site_tmplvar_contentvalues');
if ($counter == 1) { $sql="INSERT INTO $tvc (tmplvarid, contentid, value) values ($id, $docid, '$counter')"; }
else { $sql="UPDATE $tvc SET value='$counter' WHERE tmplvarid=$id AND contentid=$docid"; };
$modx->db->query($sql);
}
?>
Теперь у ресурсов с баннерами надо добавить TV с названием counter и значением по умолчанию — 0, в нём будут считаться клики.
Получилось довольно просто и красиво.
Защиты от накрутки нет, но можно при желании допилить, возможно сделаю.