Комментатор уже читал пост

Забыл дома бумажник — не судьба была сегодня плотно пообедать в «Заводи». Так что от скуки немного поигрался с любимой игрушкой.

В критике буржуйского блогосео (и ставлю теперь правильную ссылку на автора) я сходу отверг идею пересылать комментатора на какую-то особую страницу. И от своего мнения не откажусь — глупо, когда, оставляя комментарий, попадаешь на рекламный текст. Попахивает самым грязным SMO, который только можно представить.

Самое интересное, в Wordpress подобная функция уже неявно заложена — если посмотреть wp-comments-post.php, то можно увидеть, что там проверяется наличие POST-переменной redirect_to. А это значит, что создавая hidden-поле в форме, мы можем переправить комментатора практически куда угодно. Но опять же, не стоит.

Зато вот стоит немного подумать о клиентской оптимизации — представьте, что вы такой же задрот, как и я, и любите просто огромные посты. Да, именно те, к которым пишут комментарии «ниасилил». После того, как кто-то оставляет комментарий, его перекидывает на эту же страницу. Уже не кэшированную — а это значит, что блок текста до мегабайта браузер грузит заново. И это при том, что текст поста «как бы» прочитан, и комментатор либо закроет страницу, либо воспользуется навигацией по блогу.

Был вариант сделать как у Ильи Бирмана — т.е. пост с комментариями держать на совсем отдельной странице, но придумал решение более простое — будем отправлять комментатора на этот же пост, но с урезанным текстом, если он слишком большой.

Т.к. менять в коде самого движка что-то не хочется, есть задача перенаправить на этот же пост, но так, чтобы URL был другой. В Вордпресс есть забавная (для блога) поддержка постраничного разбиения поста, которой никто не пользуется. Если вы используете ЧПУ так же, как я — т.е. в виде папок, то ссылка на такие страницы будет вида .../номер-страницы/. При этом, если разбиения нет, такая ссылка будет вести именно на сам пост.

Добавим в форму отправки комментария (в comment.php) до </form> еще одно поле:

<pre><code><input type="hidden" name="redirect_to"
value="<?php echo get_permalink()."666/" ?>" />

А в single.php вместо the_content() нам нужно сделать так:

<?php
$stext=get_the_content('');
$stext = apply_filters('the_content', $stext);
$stext = str_replace(']]>', ']]>', $stext);
$maxlenpost=4000;
if((strstr($_SERVER['REQUEST_URI'],'/666/'))
				&&(strlen($stext)>$maxlenpost)) {
echo substr($stext,0,strpos($stext,"</p>", $maxlenpost-1000)).
	"</p><p>&lt;...></p>".
	' <div class="fulllink"><a href="'.get_permalink().
	'">&larr; Вернуться к полной версии записи</a></div>';
	}
else {
	echo $stext;
	}
?>

Все достаточно просто — если мы на «/666/» странице и длина текста поста превышает наш порог, то после оставления комментария будет отображена страница с урезанным текстом. После него — типографский знак «пропуска» и ссылка на полный текст с комментариями.

С сокращением похитрее, но тоже довольно просто — чтобы не было обрезанных и не закрытых тегов (чтобы весь оставшийся текст вдруг не превратился в ссылку или в курсив), мы обрезаем поабзацно — ориентируясь на </p>. Ну и, соответственно, раз напрямую обращаемся к get_the_content(), не забываем применить стандартные фильтры.

Ссылку с «возвратом» надо, конечно, оформить в CSS — для этого ей и присвоен класс .fulllink.

И, повторюсь, с другими ЧПУ решение должно немного видоизменяться — в зависимости от того, как формируется ссылка на «подстраницы».

Такое вот развлечение на пятнадцать минут.

{16 комментариев} Подписка на комментарии

Ну и, на всякий, — чек.

ваще не осилил. чек.

Сути всего этого извращения не понял :)

> Уже не кэшированную — а это значит, что блок текста
> до мегабайта браузер грузит заново.

До мегабайта?! Моя статья на 25000 символов, самая большая что я печатал, и та на мегабайт не тянет. А к статьям размером в мегабайт вообще невозможно оставить комментарии — в силу слишком большого объема мыслей и тем автора.

Люди-люди-люди! Мегабайт — это гипербола, конечно же. Мегабайт — это среднего размера роман уже (не считая HTML). А блоги еле терпят большие публикации.

Просто показываем сокращенный текст с возможностью вернуться к полному для тех, кто только что прокомментировал — грузится несравненно меньше, не надо проматывать до комментариев и т.п.

Вот например та статья на смопро — у меня обрезали Инет дома и при комментировании пришлось ждать, пока эта сволочь заберет весь HTML записи и доберется до комментов. И каждый раз, когда надо посмотреть эти комменты, надо ждать, пока будет загружена вся статья. Теперь clear?

Я у себя такое сделал, но никому не навязываю. Тем более пока не ясно, нужно ли отдавать в подписку на почту ссылку на полную или сокращенную версии.

А почему не the_excerpt?

Так даже элегантнее получится

Вот как раз excerpt подошел бы больше, но — я его не заполняю, а ставить плагин автозаполнения меня заломало. Делать мне нечего на обеде было :)

@автор: Есть такое дело.

Но я когда изучал WP увидел всю силу excerpt и понял, что этим надо пользоваться — так что в каждой теме у меня обязательно использование the_excerpt

Но я рад, что мысль у меня двигается в правильном направлении

Ну, из базы все равно грузятся все поля, так что использование excerpt — это только стремление к универсальности и стандартизации. Переложить под его использование — легко. Вот только, если в самом движке эксерпт не заполняется — будет пустое место, и тема будет бесполезна :).

Так что в этом случае сокращение текста — не функциональность, и выделять ее из темы не очень хорошее решение.

афигенная идея! респект. надо будет сделать и себе.

@lilumi: в твоем случае (у тебя ЧПУ без последнего слеша) можно оставить и echo get_permalink ()."666/", но будет редирект. так что просто 666.

У сожалению, для «дополнительного урла» без изменений mod_rewrite можно использовать только цифры — а хотелось бы, например, /discussion/.

Проверям.

Сергей, вы мне определённо нравитесь со своими постами :)

Определенно NOT GAY? :)

Можно пойти дальше и убрать комментарии так, чтобы они отображались только по вот этой ссылке /666/ (даже необязательно так — можно придумать способ, как сделать и более нормальный УРЛ). Тогда получится, как у Ильи Бирмана — ilyabirman.ru/meanwhile/ — раздельные страницы для контента и постов (что круто для некоторых).

Если же комментарии остаются в посте, то лучше закрыть эту страницу <meta name="robots" content="noindex, nofollow">

И «ты», «ты», ради бога, — на «вы» только посылают.

Исправлюсь )

че то тупанул реально.

А что такое 666 и какое принципиальное значение в нем?

А здесь можно оставить свое мнение ↓ Подписка на комментарии
какие-то из следующих трех полей можно оставить пустыми


нет тегам!!! **эмоция**, __ирония__, >цитата, {[код]}