Темонезависимая установка счётчиков

Автор BIOHAZARD, 05 декабря 2009, 09:48:12

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

BIOHAZARD

Сразу определимся - таким образом поставить можно не все счётчики, а только JavaScript счётчики, не отображающиеся на странице

Примеры таких сервисов:
google https://www.google.com/analytics/home/?hl=ru
Яндекс http://metrika.yandex.ru/
Статун http://www.statun.com/ (испытал на своём форуме - оказался непригоден)

возможно есть ещё какие то аналогичные "скромные" счётчики, но и эти два дают вполне исчерпывающую информацию о посещаемости Ваших сайтов


берём файл Sources/Load.php
ищем

// Load a theme, by ID.
function loadTheme($ID_THEME = 0, $initialize = true)
{
   global $ID_MEMBER, $user_info, $board_info, $sc;
   global $db_prefix, $txt, $boardurl, $scripturl, $mbname, $modSettings;
   global $context, $settings, $options;


заменяем на

// Load a theme, by ID.
function loadTheme($ID_THEME = 0, $initialize = true)
{
   global $ID_MEMBER, $user_info, $board_info, $sc;
   global $db_prefix, $txt, $boardurl, $scripturl, $mbname, $modSettings;
   global $context, $settings, $options;

$context['html_headers'] .= 'код вашего невидимого счётчика';




Пример вставки счётчика Яндекс.Метрики:
В сервисе Яндекс.Метрики получаем код счётчика такого вида
<!-- Yandex.Metrika -->
<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
<script type="text/javascript">
try { var yaCounterХХХХХХ = new Ya.Metrika(ХХХХХХ); } catch(e){}
</script>
<noscript><div style="position: absolute;"><img src="//mc.yandex.ru/watch/195024" alt="" /></div></noscript>
<!-- /Yandex.Metrika -->

где ХХХХХХ Ваш персональный идентификатор (шесть цифр)

Удаляем из него всё, кроме JavaScript контейнеров, получаем
<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
<script type="text/javascript">
try { var yaCounterХХХХХХ = new Ya.Metrika(ХХХХХХ); } catch(e){}
</script>


Вставляем это в файл Load.php, как показано выше

// Load a theme, by ID.
function loadTheme($ID_THEME = 0, $initialize = true)
{
   global $ID_MEMBER, $user_info, $board_info, $sc;
   global $db_prefix, $txt, $boardurl, $scripturl, $mbname, $modSettings;
   global $context, $settings, $options;

$context['html_headers'] .= '
<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
<script type="text/javascript">
try { var yaCounterХХХХХХ = new Ya.Metrika(ХХХХХХ); } catch(e){}
</script>';


Примечание 1: если в коде Вашего счётчика присутствуют одинарные кавычки ', то при вставке в код их необходимо обязательно экранировать - заменять на \'

Примечание 2: данный код приведён для SMF 1.1.x, для SMF 2.0 всё точно так же, но надо искать фрагмент
// Load a theme, by ID.
function loadTheme($id_theme = 0, $initialize = true)
{
   global $user_info, $user_settings, $board_info, $sc;
   global $txt, $boardurl, $scripturl, $mbname, $modSettings, $language;
   global $context, $settings, $options, $sourcedir, $ssi_theme, $smcFunc;
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

Mavn

Кстати не знаю но может имеет смысл вставлять в Subs.php
function template_footer()
пробовал ?
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

BIOHAZARD

Да, действительно можно вставлять в файле Sources/Subs.php
Найти

function template_footer()
{
   global $context, $settings, $modSettings, $time_start, $db_count;


заменить на

function template_footer()
{
   global $context, $settings, $modSettings, $time_start, $db_count;

   echo 'код счётчиков';

При этом счётчики выведутся ПЕРЕД футером (подвалом).

У этого способа есть несомненный плюс - можно вставлять любые счётчики, в том числе видимые.
Но есть минус - может не увязаться с дизайном.

Да и вообще принято ставить счётчики не перед футером, а прямо в нём, а здесь это не получится. Ну или придётся вручную переделывать все темы, а мы ставим обратную задачу - отредактировать всего один файл и забыть о счётчиках.

PS: не забывайте, что и здесь необходимо в коде счётчиков заменять все ' на \'
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

Mavn

слушай а ты не пробовал поставить счетчик не в начале функции а в конце перед }
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

BIOHAZARD

тогда будет после закрывающего тэга </html>
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

Mavn

ага :) точно однако смотри есть чуток выше такая замечательная штука как
function theme_copyright
в конце перед }  добавить
echo '</br>test';
и тогда инфа будет выдаваться аккурат после копирайта :). но в пределах блока вывода копирайта

<li class="copyright"></br>test</li>
      
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

BIOHAZARD

честно говоря не хотел показывать народу туда дорогу, а то начнутся ковыряния в копирайте, а потом весь форум будет в вопросах "почему у меня постоянно какая-то фигня вверху форума вылазит"

но всё же можно использовать копирайт для этой цели:
находим фрагмент

   // Lewis Media no longer holds the copyright.
   $forum_copyright = str_replace(array('Lewis Media', 'href="http://www.lewismedia.com/"', '2001-'), array('Simple Machines LLC', 'href="http://www.simplemachines.org/about/copyright.php" title="Free Forum Software"', ''), $forum_copyright);

   echo '
      <span class="smalltext" style="display: inline; visibility: visible; font-family: Verdana, Arial, sans-serif;">';

заменяем на

   // Lewis Media no longer holds the copyright.
   $forum_copyright = str_replace(array('Lewis Media', 'href="http://www.lewismedia.com/"', '2001-'), array('Simple Machines LLC', 'href="http://www.simplemachines.org/about/copyright.php" title="Free Forum Software"', ''), $forum_copyright);

   echo '
здесь код счётчиков, который выведется ПЕРЕД копирайтом
     <span class="smalltext" style="display: inline; visibility: visible; font-family: Verdana, Arial, sans-serif;">';


и/или находим

   echo '
      </span>';
}

function template_footer()
{

заменяем на

   echo '
      </span>
здесь код счётчиков, который будет выводиться ПОСЛЕ копирайтов';
}

function template_footer()
{


PS: помним про экранирование одинарных кавычек?
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

BoPoH

сделал для SMF2 RC1-2
1240: // Load a theme, by ID.
1241: function loadTheme($id_theme = 0, $initialize = true)
1242: {
1243: global $user_info, $user_settings, $board_info, $sc;
1244: global $txt, $boardurl, $scripturl, $mbname, $modSettings, $language;
1245: global $context, $settings, $options, $sourcedir, $ssi_theme, $smcFunc;
1246:
==>1247:     $context['html_headers'] .= '
1248: <script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
1249:     <script type="text/javascript">
1250:     try { var yaCounter513020 = new Ya.Metrika(513020); } catch(e){}
1251:     </script>';

теперь в логах  сыплются  ошибки

8: Undefined index: html_headers
Файл: E:/Rooms/ххххх/ххххххххх/www/Sources/Load.php
Строка: 1247

как можно исправить?

BIOHAZARD

 if (!isset($context['html_headers'])) $context['html_headers'] = '';

$context['html_headers'] .= '
<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
<script type="text/javascript">
try { var yaCounter513020 = new Ya.Metrika(513020); } catch(e){}
</script>'
;


так будет более правильно
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

BoPoH

#9
Ошибки перестали сыпаться, спасибо, только почему-то на  http://metrika.yandex.ru теперь пишет, что код установлен не на всех страницах.  Но думаю это уже мелочи  :)

PS Проверил сегодня, пишет счетчик установлен корректно,   :D BIOHAZARD, еще раз спасибо!

RBW

А если просто код счетчика держать в отдельном файле, а из разных тем его инклюдить?

BIOHAZARD

Цитата: RAINBOW от 26 декабря 2009, 10:48:18
А если просто код счетчика держать в отдельном файле, а из разных тем его инклюдить?
http://www.simplemachines.ru/index.php?topic=8.0

здесь же речь о темонезависимой установке - прописал один раз и забыл
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

L.....a

Цитата: BIOHAZARD от 26 декабря 2009, 16:46:30
http://www.simplemachines.ru/index.php?topic=8.0

здесь же речь о темонезависимой установке - прописал один раз и забыл
Хотела поставить как вы сказали на раз и забыла, но чтото не получается  :'(

xoxma

#13
Покажите пример с гугл аналистиком.
А то при вставке в тему, как раз не работает...
Модуль гугл_аналистик не ставится, либо что-то не так с правами на папки...Тема http://custom.simplemachines.org/themes/index.php?lemma=1752

$context['html_headers'] .= '
<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push([\'_setAccount\', \'код\']);
  _gaq.push([\'_trackPageview\']);
  (function() {
    var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
    ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
    var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>';

Что-то не так может с экранированием?

Bugo

А в index.template.php используемой темы не забыли внести изменения, которые делает мод при установке?

BIOHAZARD

http://www.simplemachines.ru/index.php?topic=10335.0

Цитата: Bugo от 24 января 2011, 01:17:24
А в index.template.php используемой темы не забыли внести изменения, которые делает мод при установке?
описанный здесь метод не затрагивает файлы тем, только сорцы
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

xoxma

Цитата: Bugo от 24 января 2011, 01:17:24
А в index.template.php используемой темы не забыли внести изменения, которые делает мод при установке?
При установке пишет,
ЦитироватьВы не можете загрузить или установить новый пакет модификаций, так как директория Пакетов Модификаций защищена от записи (CHMOD)!
На какую папку нужно поставить 777?

С модом Counters: Google, StatCounter & Yandex такая же история...

BIOHAZARD

/packages - 777
/packages/temp - 777 (если отсутствует, создать)
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

xoxma

Цитата: BIOHAZARD от 24 января 2011, 11:54:24
/packages - 777
/packages/temp - 777 (если отсутствует, создать)
Мод поставился, благодарю.
Но теперь не могу найти, где прописывать аналистик. На скрине показано в настройках модов, но у меня ничего там не появилось.
"Установленных модов, имеющих настройки, в данном разделе нет."

BIOHAZARD

попробуйте теперь удалить мод, на одной из страниц показывается, успешны ли будут изменения
скорее всего там у вас всё будет выделено красным и на самом деле мод так и не смог установиться
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ

Mavn

Может имеет смысл обсуждение мода в отдельной теме?
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

BIOHAZARD

думаю стоит отсечь всё лишнее и закинуть в ветку http://www.simplemachines.ru/index.php?board=16.0
с названием вроде "не устанавливается мод"
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ


Rostovchanka

#23
попробовала вариант установки счетчика, описанный в этом сообщении http://www.simplemachines.ru/index.php?topic=9107.msg60015#msg60015

выбрала вариант "ПОСЛЕ копирайтов", но он не устраивает тем, что видимые счетчики выводят между копирайтом и строкой с мобильной версией..

теперь вопрос...почему просто нельзя отредактировать Themes/default/index.template.php?
если бы я не читала форум, я бы полезла именно туда

при установке кода яндекс метрики пишет, что счетчик установлен не на всех страницах
счетчик стоит в index.template.php

Bugo

Цитата: Rostovchanka от 19 марта 2012, 06:36:43почему просто нельзя отредактировать Themes/default/index.template.php?
Потому что не все используют дефолтную тему. А у некоторых тем даже больше, чем одна. Поэтому универсальное решение с редактированием одного файла лучше, чем если бы пришлось редактировать index.template.php каждого шаблона.

Rostovchanka

Цитата: Bugo от 19 марта 2012, 14:59:37
Потому что не все используют дефолтную тему. А у некоторых тем даже больше, чем одна. Поэтому универсальное решение с редактированием одного файла лучше, чем если бы пришлось редактировать index.template.php каждого шаблона.
ясно, спасибо

scrensys

Цитата: BIOHAZARD от 05 декабря 2009, 19:45:17Да, действительно можно вставлять в файле Sources/Subs.php
Найти
function template_footer()
{
   global $context, $settings, $modSettings, $time_start, $db_count;

заменить на
function template_footer()
{
   global $context, $settings, $modSettings, $time_start, $db_count;

   echo 'код счётчиков';
При этом счётчики выведутся ПЕРЕД футером (подвалом).

У этого способа есть несомненный плюс - можно вставлять любые счётчики, в том числе видимые.
Но есть минус - может не увязаться с дизайном.

Да и вообще принято ставить счётчики не перед футером, а прямо в нём, а здесь это не получится. Ну или придётся вручную переделывать все темы, а мы ставим обратную задачу - отредактировать всего один файл и забыть о счётчиках.

PS: не забывайте, что и здесь необходимо в коде счётчиков заменять все ' на \'
Мне это помогло!  O0 версия SMF 2.1.1
ps: пожелание к администрации форума: убрать из проверочного кода графику (оставить одни буквы) очень сложно читается)
Печник. Кладка печей, каминов, барбекю +79308774777
Написать мне в Telegram
WhatsApp