Начиная с версии 2.0.73 плагин Simple Ads Manager поддерживает плагины кэширования. Он действительно поддерживает ВСЕ плагины кэширования и это здорово. Но в этой чудесной бочке мёда есть небольшая ложка дёгтя. И ложка эта есть не что иное, как конструкция javascript
document.write().
Эта конструкция может использоваться только в процессе построения DOM (Document Object Model, «объектная модель документа») и её категорически нельзя использовать после того, как DOM уже построена. Однако, SAM, в режиме совместимости с плагинами кэширования, вставляет рекламные объявления в документ с помощью AJAX запросов и после того как браузер уже построил DOM. Вставка конструкции
document.write() в документ в этот момент гарантированно убивает сам документ!
О том как с этим бороться я и хотел поговорить в этой статье. Если Вы не используете javascript коды в качестве рекламных объявлений, то Вам беспокоиться не о чем. В противном случае Вам стоит почитать эту статью.
Единственно верным способом борьбы с этим злом, является изъятие конструкции document.write() из кода рекламного объявления. Для этого необходимо обследовать код объявления на предмет этой конструкции. Для примера, обследуем код Яндекс Директ (ЯД):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<!-- Яндекс.Директ --> <script type="text/javascript"> //<![CDATA[ yandex_partner_id = 00000; yandex_site_bg_color = 'FFFFFF'; //фон сайта, замените цвет переменной если сайт имеет темный фон yandex_ad_format = 'direct'; yandex_font_size = 1.1; //Размер шрифта в блоке. По желанию можно увеличить или уменьшить yandex_direct_type = 'flat'; //Вид блока под статьей лучше выбрать плоский (flat) или горизонтальный (horizontal) yandex_direct_limit = 2; //Количество объявлений в блоке. yandex_direct_title_font_size = 3; //Размер шрифта заголовков объявлений. Может принимать значение 1, 2 или 3 yandex_direct_title_color = 'CC0000'; //Цвет заголовка объявлений yandex_direct_url_color = '000000'; //Цвет домена рекламодателя yandex_direct_text_color = '000000'; //Цвет текста объявлений yandex_direct_hover_color = 'FF0000'; //Цвет заголовка объявлений при наведении курсора yandex_direct_favicon = true; //включаем отображения фавиконов объявлений yandex_no_sitelinks = true; //отключаем быстрые ссылки document.write('<sc'+'ript type="text/javascript" src="//an.yandex.ru/system/context.js"></sc'+'ript>'); //]]> </script> |
Что делать? Просто заменить document.write() на то, что хотели прописать в документе на этапе его создания:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<!-- Яндекс.Директ --> <script type="text/javascript"> //<![CDATA[ yandex_partner_id = 00000; yandex_site_bg_color = 'FFFFFF'; //фон сайта, замените цвет переменной если сайт имеет темный фон yandex_ad_format = 'direct'; yandex_font_size = 1.1; //Размер шрифта в блоке. По желанию можно увеличить или уменьшить yandex_direct_type = 'flat'; //Вид блока под статьей лучше выбрать плоский (flat) или горизонтальный (horizontal) yandex_direct_limit = 2; //Количество объявлений в блоке. yandex_direct_title_font_size = 3; //Размер шрифта заголовков объявлений. Может принимать значение 1, 2 или 3 yandex_direct_title_color = 'CC0000'; //Цвет заголовка объявлений yandex_direct_url_color = '000000'; //Цвет домена рекламодателя yandex_direct_text_color = '000000'; //Цвет текста объявлений yandex_direct_hover_color = 'FF0000'; //Цвет заголовка объявлений при наведении курсора yandex_direct_favicon = true; //включаем отображения фавиконов объявлений yandex_no_sitelinks = true; //отключаем быстрые ссылки //]]> </script> <script type="text/javascript" src="//an.yandex.ru/system/context.js"></script> |
Всё очень просто … Если конструкция задана явно … А если нет?
Если нет, создаём тестовый HTML документ и вставляем в него код. Например этот (Text Links Ads):
1 2 3 4 5 6 |
<script type="text/javascript"> /* <![CDATA[ */ function affiliateLink(str){ str = unescape(str); var r = ''; for(var i = 0; i < str.length; i++) r += String.fromCharCode(4^str.charCodeAt(i)); document.write(r); } affiliateLink('8e%24lvab9%26lppt%3E++sss*pa%7Cp%29hmjo%29e%60w*gki+%3Bvab976523%3C%26%3A8mic%24wvg9%26lppt%3E++sss*pa%7Cp%29hmjo%29e%60w*gki+miecaw+fejjavw+fqmh%60%2936%3C%7C%3D4*cmb%26%24fkv%60av9%264%26%24ehp9%26Pa%7Cp%24Hmjo%24E%60w%26+%3A8+e%3A'); /* ]]> */ </script> |
открываем код документа, такая возможность есть в любом браузере, и смотрим, что из этого получилось:
1 |
<a href="//www.text-link-ads.com/?ref=321678"><img src="//www.text-link-ads.com/images/banners/build-728x90.gif" border="0" alt="Text Link Ads"></a> |
Этот код несложно превратить в данные для режима изображения плагина:
Вот и всё. Если Вы будете следовать этим инструкциям, у Вас не возникнет проблем с режимом совместимости Simple Ads Manager с плагинами кэширования.
Удачи!
© 2014 – 2015, minimus. Все права защищены. При копировании и републикации статьи, ссылка на первоисточник обязательна.
Здравствуйте!
Использую плагин в режиме совместимости с плагинами кеширования и возникает проблема. При посещаемости выше 5 тыс. чел. в день сайт периодически начинает виснуть на 1-7 минут, каждые 2-4 часа. В ТП хостинга (fastvps) ответили что файл /wp-content/plugins/simple-ads-manager/sam-ajax.php создает большую нагрузку. Не планируется в будущих релизах что-то сделать, чтобы это побороть. Я даже готов профинансировать эту работу, т.к. плагин действительно хороший.
И еще один момент. Вывожу 2 баннера в ротацию, одному ставлю в настройках дату начала показа – через 4 дня, второму никаких ограничений не ставлю. Сначала баннер, у которого ограничений по сроку показа нет, выводится нормально, но через какое-то время он перестает отображаться. Т.е. у него почему-то, видимо, тоже срабатывает ограничение на срок начала показа, как и у второго баннера.