Показать сообщение отдельно
  #13 (permalink)  
Старый 26.05.2019, 09:33
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Простите, что не сразу ответил! Да, то что вы описали в видео, лучше всего сделать при помощи ссылки, ведь она ведёт на страницу отзывов!

В таком случае, там совсем другая логика!

Каждый третий раз ссылка, на которую ещё не нажимали, появляется. Если на неё нажать, происходит переход, а вместо ссылки появляется «Спасибо»! При следующих заходах вместо такой ссылки пишут, что вы уже оставляли отзыв!

Данные получаются/сохраняются при помощи функции getData/saveData, которые получают/сохраняют данные в локальном хранилище, но вы можете, если хотите, переписать эти функции, чтобы данные получались/сохранялись удалённо (например на сервере)

Сама ссылка всегда открывается в новой вкладке (если функционал предполагает, то почему бы не автоматизировать!) Каждая такая ссылка должна иметь в атрибуте id префикс (в данном случае rating-), после которого идёт уникальный номер (например, натуральные числа по порядку) Это позволяет однозначно обозначить ссылку на любой странице и сказать, посещали её или нет!

Вот пример...
<script>
document.addEventListener("DOMContentLoaded", function() {
	function getData() {
		var data = "ratingData" in localStorage ?
			JSON.parse(localStorage.ratingData) : { count: 1 };
		return Promise.resolve(data);
	}
	function saveData(ratingData) {
		localStorage.ratingData = JSON.stringify(ratingData);
		return Promise.resolve("ok");
	}

	var PREFIX = "rating-";
	var links = Array.from(
		document.querySelectorAll("a[id^='" + PREFIX.replace(/'/g, "\\'") + "']")
	);
	
	var hasBeenRatedElement = document.createElement("span");
	hasBeenRatedElement.innerHTML = "Вы уже оставляли отзыв!";
	
	var thanksElement = document.createElement("span");
	thanksElement.innerHTML = "Спасибо!";
	
	getData().then(function(ratingData) {		
		links.forEach(function(link) {
			var id = link.id.replace(PREFIX, "");

			if(id in ratingData) {
				link.parentNode.insertBefore(hasBeenRatedElement.cloneNode(true), link);
				link.parentNode.removeChild(link);
			} else {
				if(ratingData.count !== 0) {
					link.parentNode.removeChild(link);
					return;
				}
				
				link.target = "_blank";
				link.addEventListener("click", function() {
					ratingData[id] = 1;
					saveData(ratingData);
					
					link.parentNode.insertBefore(thanksElement.cloneNode(true), link);
					link.parentNode.removeChild(link);
				});
			}
		});
		
		ratingData.count = (ratingData.count + 1) % 3;
		saveData(ratingData);
	});
});
</script>

<p><a id="rating-1" href="https://google.com/">Оставить отзыв 1</a></p>
<p><a id="rating-2" href="https://ya.ru/">Оставить отзыв 2</a></p>


Такие ссылки могут храниться в таблице в базе данных, тогда вы можете легко ими управлять, также в других таблицах может быть ссылка на первичный ключ `id` и пр.
Код:
+------+---------------------+
| id   | link                |
+------+---------------------+
|    1 | https://google.com/ |
|    2 | https://ya.ru/      |
+------+---------------------+

О, да! Язык не называется YuhvuhScreapt, он называется JavaScript. Может вам поможет эта табличка с некоторыми словами web-разработки! http://malleys.lark.ru/english.html

Последний раз редактировалось Malleys, 26.05.2019 в 09:55.
Ответить с цитированием