Yandex Metrika Extension

Всем привет.

Сегодня работая над задачей отключения счетчиков для dev и test окружений (счетчики необходимо оставить только на production, чтобы "не портить статистику") я обнаружил, что нет готового расширения для гибкого внедрения ЯндексМетрики.

Подумал, что это не есть хорошо :rolleyes: и написал свой велосипед виджет.

Опубликовать в разделе с расширениями у меня не получилось, т.к. я еще "зеленый".

Поэтому решил поделиться решением на форуме. Может кому-то пригодится.

Код на гитхабе: github.com/lexeo/yii-yandex-metrika

*ссылка не кликабельна, т.к. я даже ссылку вставить не могу.

В принципе, не знаю, что можно еще туда добавить. Если будут идеи - welcome.

Все возможные параметры описаны свойствами класса. А статические допустимые значения - константами.

Примеры использования приведены в Readme файле репозитория.

Но часть выложу и сюда, чтобы сразу было понятно, с чем его едят.




/* @var $this CController */

$this->widget('ext.yii-yandex-metrika.EYandexMetrikaWidget', array(

   'id' => 123456789,

   'clickMap' => true,

   'trackLinks' => true,

   'accurateTrackBounce' => true,

));



Можно основные настройки вынести в конфиг:




'components' => array(

    'widgetFactory' => array(

        'widgets' => array(

            'EYandexMetrikaWidget' => array(

                // you can disable it while working on local machine

                'enabled' => true, 

                'id' => 123456789,

                'clickMap' => true,

                'trackLinks' => true,

                'accurateTrackBounce' => true,


                'informerOptions' => array(

                    'backgroundColor' => '#427a4b', // hex color code

                    'textColor' => 1, // 0|1

                    'arrowColor' => 0, // 0|1

                    'dataType' => 'visits', // visits|pageviews|uniques

                    'type' => 1, // 0|1

                ),

            ),

        ),

    ),

),



и тогда во view/layout можно ограничиться простым вызовом:




$this->widget('ext.yii-yandex-metrika.EYandexMetrikaWidget');



Также виджет умеет рендерить Информер (изображение со статистикой)




/* @var $this CController */

$this->widget('ext.yii-yandex-metrika.EYandexMetrikaWidget', array(

    'id' => 123456789,

   'informer' => true,

   'informerSize' => 1, // 1|2|3

   'informerDataType' => 'uniques',

    'informerArrowColor' => 1, // 0|1 

   // or

   'informerOptions' => array(

        'textColor' => 0,

        'backgroundColor' => '#b7b7b7',

        'size' => 2,

   ),

));



Собственно на этом все. Код очень прост. Поэтому любой без труда сможет в нем разобраться.

Конструктивная критика, исправления и предложения - очень даже приветствуются.

Сделай чтобы его возможно было подключить через composer. Я лично почти не пользуюсь плагинами которые надо руками качать, и устанавливать… Но вообще - молодец)

И вообще Почему бы не вынести конфигурации в файл config основной а в шаблоне просто рендер вызывать? Зачем захламлять шаблон ненышными конфигами? + сам подумай, если надо менять конфиги - надо лезть во вьюху… не правильно чуток.

Именно поэтому и было написано расширение. У меня проект, работающий на основе 4х приложений, связанных иерархической системой конфигов. Около десятка разных layout`ов.

И мне нужно было решение, которое позволит гибко настраивать счетчик и главное - отключать его в среде dev/test НЕ внося изменения в основные файлы.

Обрати внимание, выше я привел пример конфигурирования виджета через WidgetFactory в конфиг-файле.

После этого обращение к виджету упрощается. Параметры вовсе не нужно передавать (если, конечно, ты не хочешь переопределить их значения).

Окей, будет сделано. Сейчас только разберусь, что к чему. Ранее пользовал Composer только для включения в проект сторонних файлов. Сам еще не настраивал пакеты.

Чтобы не было проблем то выложи проект на гите и подключи его на packagist.org . Тогда в composer.json не надо будет писать что проект на гите и так далее…

Как раз на днях задумывался по поводу Яндекс Метрики, но самому делать виджет было лень, спасибо большое :)

Кстати пользуясь случаем такой вопрос, а какие условия на сайте чтоб выкладывать свои расширения?