Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вставить рекламный блок после тега "name="cat" в статье (https://javascript.ru/forum/misc/60982-vstavit-reklamnyjj-blok-posle-tega-name%3D-cat-v-state.html)

denka977 30.01.2016 17:30

Вставить рекламный блок после тега "name="cat" в статье
 
Задался вопросом вставки рекламного блока AdSense посреди поста. Вот после строк кода в теле статьи:
<a name="cut"></a>

Возможно найдутся добрые люди, которые подскажут как это реализовать?

рони 30.01.2016 18:16

denka977,
а как вы обычно добавляите?

denka977 30.01.2016 20:20

Цитата:

Сообщение от рони (Сообщение 405555)
denka977,
а как вы обычно добавляите?

обычно у меня более благоприятные условия, позволяющие обойтись знаниями css И html.

на текущем движке там все условия сводят в потребности привязки на js.

мне желательно хотя бы объяснить, как можно:

чтобы добавлялся текст после строк "<a name="cut"></a>" в коде страницы.

ИЛИ

чтобы добавлялся текст после первого закрывающегося тега p в теле статьи (</p>)

destus 30.01.2016 20:39

<script>
	function insertAfter(elem, refElem) {
 		 return refElem.parentNode.insertBefore(elem, refElem.nextSibling);
	}

	
		window.onload = function(){
			var a = document.getElementById('test');
			var text = document.createTextNode('Текст после ссылки');
			insertAfter(text,a);
		}
</script>
    
    <a href="#" id="test">Ссылка</a>

рони 30.01.2016 20:59

denka977,
https://learn.javascript.ru/modifying-document

denka977 31.01.2016 00:39

Цитата:

Сообщение от рони (Сообщение 405580)

Вот, думаю этот элемент подходит для конструкции.
http://javascript.ru/tutorial/dom/se...elementsbyname

Но пока не выходит его привести в работоспособность.

рони 31.01.2016 00:58

denka977,
нет кода нет совета

denka977 31.01.2016 01:04

Цитата:

Сообщение от рони (Сообщение 405645)
denka977,
нет кода нет совета

Если подобную логику рассмотреть:

<script>
	function insertAfter(elem, refElem) {
 		 return refElem.parentNode.insertBefore(elem, refElem.nextSibling);
	}

	
		window.onload = function(){
			var a = document.getElementByName('test');
			var text = document.createTextNode('Текст после ссылки');
			insertAfter(text,a);
		}
</script>
    
    <a name="test"></a>


однако, неработает

рони 31.01.2016 01:16

denka977,
a это массив, чтобы выбрать элемент массива нужен индекс
insertAfter(text,a[0]);

denka977 31.01.2016 01:42

Цитата:

Сообщение от рони (Сообщение 405651)
denka977,
a это массив, чтобы выбрать элемент массива нужен индекс
insertAfter(text,a[0]);

всеровно не работает :/

рони 31.01.2016 01:50

denka977,
потому что s пропущено

denka977 31.01.2016 12:35

Цитата:

Сообщение от рони (Сообщение 405653)
denka977,
потому что s пропущено

Благодарю! :)

<script>
	function insertAfter(elem, refElem) {
 		 return refElem.parentNode.insertBefore(elem, refElem.nextSibling);
	}
			window.onload = function(){
			var a = document.getElementsByName('test');
			var text = document.createTextNode('Текст после ссылки');
			insertAfter(text,a[0]);
		}
</script>
    
    <a name="test"></a>


Заработало! Еще раз спасибо!

Теперь относительно AdSense..

Пробую вывести рекламный блок так:

<script>
	function insertAfter(elem, refElem) {
 		 return refElem.parentNode.insertBefore(elem, refElem.nextSibling);
	}

	
		window.onload = function(){
			var a = document.getElementsByName('cut')[0].innerHTML += '<ins class="adsbygoogle"\n\
     style="display:inline-block;width:728px;height:90px"\n\
     data-ad-client="ca-pub-------------------"\n\
     data-ad-slot="---------"></ins>\n\
<script>(adsbygoogle = window.adsbygoogle || []).push({});</scr'+'ipt>';
			insertAfter(text,a[0]);
		}
</script>


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

В чем причина?

destus 31.01.2016 12:51

var a = document.getElementsByName('cut')[0]
У вас в a уже хранится один элемент, а не массив, зачем a[0] передавать в insertAfter?

denka977 31.01.2016 13:12

Цитата:

Сообщение от destus (Сообщение 405703)
var a = document.getElementsByName('cut')[0]
У вас в a уже хранится один элемент, а не массив, зачем a[0] передавать в insertAfter?

судя по всему, незачем.
Я в этом деле профан, так что..
что-то в коде выходит не так, ибо баннер AdSense судя по конечному коду не погружается до конца

рони 31.01.2016 13:48

denka977,
скрипт текстом не сработает

denka977 31.01.2016 14:04

Цитата:

Сообщение от рони (Сообщение 405710)
denka977,
скрипт текстом не сработает

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

рони 31.01.2016 14:10

denka977,
создать тег sript ему добавить type вставить на страницу и src прописать

denka977 31.01.2016 15:24

Цитата:

Сообщение от рони (Сообщение 405716)
denka977,
создать тег sript ему добавить type вставить на страницу и src прописать




<script>
	function insertAfter(elem, refElem) {
 		 return refElem.parentNode.insertBefore(elem, refElem.nextSibling);
	}

		window.onload = function(){
			var a = document.getElementsByName('cut')[0].innerHTML = '<script type="text/javascript" src="http://site.com/adsense.html"></scr'+'ipt>';
			insertAfter(text,a);
		}
	
</script>


так?

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

рони 31.01.2016 16:00

denka977,
http://javascript.ru/forum/misc/2368...v-skripte.html
http://javascript.ru/forum/misc/1041...et-skript.html
и ещё куча подобного на форуме

denka977 31.01.2016 17:07

Задача решена

Что я сделал: (если это дикий костыль - поправьте меня).

Основной код в шаблоне стал таким:

<script>
	function insertAfter(elem, refElem) {
 		 return refElem.parentNode.insertBefore(elem, refElem.nextSibling);
	}
var script = document.createElement('script');
script.src = 'http://site.com/adsense.js';
		window.onload = function(){
			var a = document.getElementsByName('cut')[0].appendChild(script);
			var a = document.getElementsByName('cut')[0].innerHTML = '<ins class="adsbygoogle"\n\
     style="display:inline-block;width:468px;height:60px"\n\
     data-ad-client="ca-pub-00000000000000000"\n\
     data-ad-slot="000000000"></ins>';
			insertAfter(text,a);
		}

</script>


В файл adsense.js прописал:
(adsbygoogle = window.adsbygoogle || []).push({});

destus 31.01.2016 17:16

Опишите логику своих действий. Вы передаете в insertAfter переменную text, однако она у вас нигде не инициализирована.

denka977 31.01.2016 17:36

Цитата:

Сообщение от destus (Сообщение 405735)
Опишите логику своих действий. Вы передаете в insertAfter переменную text, однако она у вас нигде не инициализирована.

Логика моя - единственный инструмент :write: , который тут и затащил, ибо знаний у меня.. :no: но большая благодарнасть тем, кто наталкивал меня на поиски решений.


Я так понял в коде немножко лишнего имеется.. потому что я скопипастил первый опубликованый пример в топике и на его основе химичил.

Сейчас проанализировал весь код, удалил пару ненужных (имхо) строк и конечный результат вышел таков:

<script>
var script = document.createElement('script');
script.src = 'http://site.com/adsense.js';
		window.onload = function(){
			var a = document.getElementsByName('cut')[0].appendChild(script);
			var a = document.getElementsByName('cut')[0].innerHTML = '<div class="ad123"><ins class="adsbygoogle"\n\
     style="display:inline-block;width:728px;height:90px"\n\
     data-ad-client="ca-pub-000000000000000000"\n\
     data-ad-slot="000000000"></ins></div>';
		}
</script>


верно?

destus 31.01.2016 17:39

Чтобы было совсем гуд
<script>
var script = document.createElement('script');
script.src = 'http://site.com/adsense.js';
		window.onload = function(){
			var a = document.getElementsByName('cut')[0];
            a.appendChild(script);
			a.innerHTML = '<div class="ad123"><ins class="adsbygoogle"\n\
     style="display:inline-block;width:728px;height:90px"\n\
     data-ad-client="ca-pub-000000000000000000"\n\
     data-ad-slot="000000000"></ins></div>';
		}
</script>


Часовой пояс GMT +3, время: 19:23.