Тут либо в .htaccess файле 301 настраивается. Быстро, сразу для всех запросов, соответствующих условиям.
Читайте про rewrite_cond, rewrite_rule
Либо перенастроить роутер в самом движке CMS. Это серверный файл, принимающий клиентские запросы при каждом обращении к новой странице сайта. Тут уже нужно доки по самой CMS изучать.
DemonFromIrk, мне было самому интересно.
Вот, на основе вашей заготовки для тренировки такую плюшку запилил: https://js-master.ru/examples/VueJS/ToDo/
Там уже с сохранением на серверной стороне, возможностью помечать активные, возможностью редактирования элементов двойным кликом...
Широко раскрывает возможности Vue, и для обучения мне было полезно.
Юрий Есин, ну, если с этой точки зрения, то конечно.
Но ответ вы уже дали, а я намекнул на то, к чему это приведёт. При этом - прокомментировал не ваш ответ, а сам вопрос - тоже, чтобы не разводить демагогию.
Мне ваша позиция ясна и даже симпатична. Но, как говорил мой Учитель: Лучше потратить время на обучение правильным движениям, чем потратить ещё больше времени на последующее переучивание.
Есть практики хорошие, очень хорошие, терпимые и пр. Но есть такие, которыми пользоваться нельзя никогда. Это - как исполнять интерпретатором входящие данные без фильтрации. Ну потому, что нельзя, и всё тут, без компромиссов.
Там выше Абдула комментировал - так там без объяснений, просто эмоции. А вам что-то в моих наводящих вопросах не понравилось...
Юрий Есин, если серьёзно, то автор комментария начинал изучать основы веба с html + css, создавая статические странички, изучая протоколы передачи данных.
Но НЕ лез сразу в JS, тем более - в jQuery, тем более - в AJAX.
А уж коль назвался груздём - так уж и полезай в кузовок.
А что такое "обновлять функцию"?
Это - исполнять её по таймеру и долбить сервер с КАЖДОГО клиента КАЖДУЮ секунду запросами?
То есть, будет 100 чел на сайте - будет 100 запросов в секунду?
А дайте фрагмент разметки. Мне кажется, что элементы с классами year-N должны иметь общего предка. В этом случае - нужно использовать делегирование события клика с него, т.о. сократив количество обработчиков с 10 до 1.
Буферизация - это лучшее решение в большинстве задач подобного рода. См. ответ от Антон Шаманов .
Но вот как-то у меня был случай, что массив было намного удобнее собирать именно литерально - в строку. Это было и удобнее, и понятнее в том случае. А вот, чтобы его потом вытащить из строки, я использовал eval.
Да, можно было подтянуть синтаксис, и юзать json_decode, но тут важно понимать, что разницы особой нет.
Если через eval пропускается внутренняя строка, без всяких входящих данных - он ничем не опасен. Во всех остальных случаях - лучше его не использовать.