Цикл в скрипте AJAX (вывод контента Ajax-ом в WordPress)

N
На сайте с 04.10.2012
Offline
8
5890

Добрый день.

Сайт на WordPress. Есть задача в каждом посте часть контента выводить через Ajax (нужно спрятать от поисковиков копипаст).

Действую по инструкции с http://zarabotat-na-sajte.ru/uroki-html/vivod-html-s-pomowyu-ajax.html

Кратко: копипаст лежит в файле и скриптом подгружается в посте. Соответственно, для каждого поста свой файл с копипастом.

По инструкции, если файлов много, то скрипт выглядит:

(function($) {

$(function() {
$("#block1").load("block1.html");
$("#block2").load("block2.html");
.................................
$("#blockN").load("blockN.html");
})
})(jQuery)

Однако, предполагается, что количество постов и файлов будет расти.

Чтобы каждый раз при добавлении нового поста не редактировать скрипт (да и вообще не раздувать его размер) можно ли как-то зациклить этот код? Или м.б. можно автоматом заменять цифры на id поста?

p.s. Кстати, может есть какое-нить лучшее решение задачи и я вообще не туда копаю?

Не люблю форумы
fsou1
На сайте с 17.07.2012
Offline
45
#1

Я бы на Вашем месте написал маленький сервис на PHP, который принимает 1 параметр- Id поста, обращается к базе, получает текст и возвращает это Вашему JavaScript'у.

---------- Добавлено 09.11.2012 в 14:35 ----------

Вот пример того, что Вам условно требуется, судя по описанию задачи:

http://itmemo.ru/2012/02/ajax-i-php-rabota-s-bazoy-dannyih/

show.php - принимает параметр, выбирает из базы, возвращает;

На страницах, т.к. Вы используете jQuery:

$.ajax({

type: "POST",
url: "show.php", // страница, куда стучимся за данными
data: "idcat="+$("#idcat").val(), // параметры, которые передаем
success: function(html){ // что делаем, когда получили ответ
$("#content").html(html); // вставляем полученные данные на страницу
}
});
H
На сайте с 09.10.2012
Offline
11
#2

Ну, если нужно, зациклите же.)

Правда, это все равно некрасивое решение (правильное вам подсказали выше).

Ваш пример с циклом.

function load(n)

{

for (i=1;i<=n;i++)

{

var block = 'block'+i;

$('#'+block).load(block+'.html');

}

}

Но тут куча минусов, например: под каждый пост свой html файл? это дорого.

N
На сайте с 04.10.2012
Offline
8
#3
fsou1:
Я бы на Вашем месте написал маленький сервис на PHP, который принимает 1 параметр- Id поста, обращается к базе, получает текст и возвращает это Вашему JavaScript'у.
hedint:
Ну, если нужно, зациклите же.)
Правда, это все равно некрасивое решение (правильное вам подсказали выше).

Спасибо.

А как предлОжите хранить в базе отдельно уникальный текст поста и копипасту?

hedint:

Но тут куча минусов, например: под каждый пост свой html файл? это дорого.

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

Теперь думаю плагином добавлять дополнительное поле к каждому посту и копипасту сохранять уже в нем, и попробую применить решение из 2 сообщения...

H
На сайте с 09.10.2012
Offline
11
#4
Nevkusny:
Спасибо.
А как предлОжите хранить в базе отдельно уникальный текст поста и копипасту?

завести поля real_post (TEXT) и copy_post(TEXT)

тянуть AJAX'ом функцией, которую привел fsou1.

fsou1
На сайте с 17.07.2012
Offline
45
#5

Да, можно добавить дополнительное поле, в которое складывать копипаст и всё что угодно, а потом тянуть их AJAX'ом

богоносец
На сайте с 30.01.2007
Offline
754
#6

И не забудьте закрыть в роботсе урлы JS, как и советуют в хелпах ПС, а то всякое бывает.

А что показать тем, у кого JS отключены? Первое, что в голову приходит — не полезно

<noscript> <h1>Включите JavaScript ...

N
На сайте с 04.10.2012
Offline
8
#7

Реализовал таким образом:

в single.php JS-скрипт - определяет ИД поста, передает его в php, получает в ответ текст из доп поля этого поста, вставляет его в div.

Долго мучился с ответом. Без проблем смог определить ИД поста и передать его из JS в PHP. Но вот получить адекватный ответ не получалось, т.к. php был отдельным от движка файлом. Подружить его с WordPress удалось по инструкции от Dimox - http://dimox.name/downloading-of-the-content-on-wordpress-with-ajax/ Он предлагает php cкрипт запихать в шаблон страницы, и создать одну страницу в WordPress-e с этим шаблоном. И в JS скрипте обращаться уже к этой странице, а не напрямую в php файл.

Выглядит у меня все так:

single.php


<div id="copypaste"></div>
<script>
$.get('http://***/copypaste-page/', {post-id:<?php echo the_ID(); ?>}, function(data) {
$("#copypaste").html(data);
});
</script>

Соответственно, httр://***/copypaste-page/ - это адрес страницы с шаблоном, он закрыт в роботсе.

Код шаблона страницы:


<?php
/*
Template Name: AJAX копипаста
*/
?>
<?php $pid=$_GET[post-id]; ?>
<?php
if(get_post_meta($pid, 'copy-past', true) != ""){
echo get_post_meta($pid, 'copy-past', true);
}
?>

У каждого поста создано дополнительное поле copy-past, куда сохраняется нужный текст.

богоносец:

А что показать тем, у кого JS отключены? Первое, что в голову приходит — не полезно
<noscript> <h1>Включите JavaScript ...

Что выводить тем, у кого не включен JS, пока не думал.

Какие еще варианты?

И главный вопрос, не создал ли я этим кодом дыр в безопасности? В скриптах не силен, что опасно, что нет - не знаю.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий