Перейти к контенту

Тэг cut - аналог ЖЖшного lj-cut


l-k

Рекомендуемые сообщения

Полный аналог тэга lj-cut, знакомого многим по LiveJournal.

 

Позволяет спрятать одну или несколько частей записи, чтобы не "утяжелять" ленту друзей. Полный текст будет виден только на странице комментариев и в версии для печати. Вместо спрятанного текста в ленте друзей, календаре и пр. местах будет ссылка на страницу комментариев, точно на начало скрытого текста.

 

Тут уже где-то в мае выкладывали подобный мод, но, во-первых, его не выделили в отдельную тему, во-вторых, в нем в каждой записи был возможен только один тэг cut.

1) /misc/post_render.php

после

	var $authors = array();

добавить

	var $cut_posts = array();
var $cut_attachments = array();

 

в функции process_post перед

$row['post'] = $this->post_db_parse_bbcode($row['post']);

добавить

		$this->cut_url = $journal->base_url."user=".$row['journal_id']."&comm=".$row['pid'];
	$this->default_txt = $ibforums->lang['jscode_text_cut_default'];
	$this->show_full = ($ibforums->input['comm'] OR $ibforums->input['preview_post']) ? 1 : 0;

	$row['post'] = preg_replace_callback( "#\[cut=?([^]]*?)?\](.+?)\[/cut\]#is", array(&$this,'cut_link'), $row['post'] );

	if (strpos(strtolower($row['post']), "[cut") !== false)
	{
		if ($this->show_full)
		{
			$row['post'] = preg_replace("#\[cut(=[^]]*?)\]#i", "<a name='cut'></a>", $row['post']);
		}
		else
		{
			preg_match("#\[cut(=[^]]*?)\]#i", $row['post'], $matches, PREG_OFFSET_CAPTURE);
			$this->cut_posts[] = $row['pid'];

			$matches[1][0] = ltrim($matches[1][0],"=");
			if (!$matches[1][0]) $matches[1][0] = $this->default_txt;
			$row['post'] = substr($row['post'], 0, $matches[0][1])." ( <a href='".$this->cut_url."#cut'>".$matches[1][0]."</a> )";
		}
	}

 

далее перед

	function post_db_parse_bbcode($t="")

добавить

	function cut_link($matches)
{
	static $i = 0;

	$matches[1] = ltrim($matches[1],"=");

	if ($this->show_full)
	{
		return "<a name='cut".$i++."'></a>".$matches[2];
	}
	else
	{
		if (preg_match_all( "#\[attachid=(\d+?)\]#i", $matches[2], $attachids ))
		{
			foreach ($attachids[1] as $k => $v)
			{
				$this->cut_attachments[$v] = $v;
			}
		}

		if (!$matches[1]) $matches[1] = $this->default_txt;

		return " ( <a href='".$this->cut_url."#cut".$i++."'>".$matches[1]."</a> )";
	}
}

далее в функции render_attach, после

			foreach ($attached[$id] as $row)
		{

добавить

				if (count($this->cut_attachments))
			{
				if (in_array($row['attach_id'], $this->cut_attachments))
				{
					continue;
				}
			}

далее перед

						$post_attach .= $to_post.' ';

добавить

						if (count($this->cut_posts))
					{
						if (in_array($row['attach_pid'], $this->cut_posts))
						{
							continue;
						}
					}

 

2. prints.php

перед

$post['post'] = $this->post_render->post_db_parse_bbcode($post['post']);

добавить

				$post['post'] = preg_replace( "#\[cut([^]]*?)?\](.+?)\[/cut\]#is", "\\2", $post['post'] );
			$post['post'] = preg_replace( "#\[cut([^]]*?)\]#i", "", $post['post'] );

 

3. skin_q_reply.php, функция quick_reply_form

перед

	// IBC Code stuff

добавить

function tag_cut()
{
var txt = prompt(text_cut, text_cut_default);

if (txt==null) return;
	if (!txt) {
		doInsert("[CUT]", "[/CUT]", false);
	return;
	}else{
		doInsert("[CUT="+txt+"]", "[/CUT]", false);
	}
}

var text_cut			= "{$ibforums->lang['jscode_text_cut']}";
var text_cut_default	= "{$ibforums->lang['jscode_text_cut_default']}";
var help_cut			= "{$ibforums->lang['hb_cut']}";

куда-нибудь между кнопками вставить новую. У меня так: после

<input class='button' type='button' accesskey='l' value=' Список '	 onclick='tag_list()'		   name="LIST" onmouseover="hstat('list')" />

добавлено

{$data['_CUT_BUTTON']}

 

4. /misc/post_functions.php

функция reply_form

перед

			// Full form
		$this->html = $journal->skin->html['q_reply']->quick_reply_form($data);

добавить

			if (isset($ibforums->input['preview_post']) or ($ibforums->input['aid']=='addpost' || ($ibforums->input['aid']=='edit' && !isset($ibforums->input['comm']))))
		{
			$data['_CUT_BUTTON'] = "<input class='button' type='button' accesskey='c' value=' CUT '	 onclick='tag_cut()'   name=\"CUT\" onmouseover=\"hstat('cut')\" />";
		}
		else
		{
			$data['_CUT_BUTTON'] = "";
		}

(это чтобы кнопка CUT была только на странице добавления/редактирования записи, но не комментариев).

 

5. lang_journal.php

после

$lang = array (

добавить

'jscode_text_cut'   => "Введите текст ссылки",
'jscode_text_cut_default'   => "Продолжение...",
'hb_cut'				=>	"Тэг cut (спрятать продолжение в комментарии)",

 

----

Я вдруг вспомнила про этот мод и решила его обновить - за эти 2.5 года у нас поменялась версия php, теперь это 5.2. Помнится, после переезда в первое время были какие-то глюки, пропадал текст в сообщениях, содержащих этот тэг.

 

Несколько раз уже натыкалась на подобный баг: если регулярное выражение слишком расплывчатое, напр. #\[cut(.*?)\]#i" вместо #\[cut([^]]*?)\]#i", парсер может выдать пустой текст в результате замены. На этом форуме уже обсуждали такой баг http://forums.ibresource.ru/index.php?showtopic=52804

 

За это время еще какие-то изменения были внесены. Кажется, связанные с видимостью кнопки для вставки тэга. Если кому-то нужны эти изменения - отметьтесь в теме, я их найду у себя :D

Изменено пользователем l-k
Ссылка на комментарий
Поделиться на других сайтах

тег работает, кнопка есть, но эффекта от нажатия ноль.

два раза переписывал файлы

форум 2.3 журналы 2.1

это у меня сначала в инструкциях была строка

$data['_CUT_BUTTON'] = "<input class='button' type='button' accesskey='c' value=' CUT ' onclick='java script:tag_cut()' name=\"CUT\" onmouseover=\"hstat('cut')\" />";

Этот форум из соображений безопасности разбивает слово java_script пробелом - получается java script. На самом деле это слово не нужно вообще, его можно убрать (инструкции уже исправлены).

Ссылка на комментарий
Поделиться на других сайтах

угу все заработало,но только обнаружился косяк

 

в старых записях где есть аттачи картикок. они не все отображаются или отображается только одна из пяти например вместо них теги [атач=234] [атач=235] [атач=236] и т.п.

Ссылка на комментарий
Поделиться на других сайтах

Интересно было бы посмотреть (т.е. дайте ссылку). Этот мод работает на форуме, где в Дневниках 140000 аттачей, и пока что никто не жаловался на такие косяки.

 

Вы раньше не ставили другую версию cut, которая пробегала где-то здесь в мае?

Изменено пользователем l-k
Ссылка на комментарий
Поделиться на других сайтах

ссылку дать немогу

откатил изменения все картинки появились)

это первый кат мод

еще стоит мод кто просматривал дневник, но не думаю что из-за него

может что не привильно добавил в

post_functions.php

post_render.php

Ссылка на комментарий
Поделиться на других сайтах

Ну что вам сказать. У меня ipb 2.0, mJournal 2.07. Возможно, для вашего случая "форум 2.3 журналы 2.1" этот мод действительно не подходит. Я не могу проверить.
Ссылка на комментарий
Поделиться на других сайтах

Arhar, xRay, напомню - еще один полезный мод забыт. Тот, где аттачи раскладываются по папкам с id пользователя.

 

Я еще разик отредактировала первое сообщение с описанием ката - чтобы на один preg_ было меньше :D

Ссылка на комментарий
Поделиться на других сайтах

Arhar, xRay, напомню - еще один полезный мод забыт. Тот, где аттачи раскладываются по папкам с id пользователя.

 

Я еще разик отредактировала первое сообщение с описанием ката - чтобы на один preg_ было меньше :D

 

 

http://www.ibresource.ru/forums/index.php?showtopic=46849 - не забыт! Там просто очень длинная инструкция, поэтому я ее в архиве положил.

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...
Возможно, для вашего случая "форум 2.3 журналы 2.1" этот мод действительно не подходит.
Не "возможно", а так и есть :D Наблюдается описанная выше проблема с аттачами (и чего-то кнопка упорно не захотела добавляться в редактор).

А без тега тяжко ;) Утомляет листать здоровые тексты и кучу картинок

 

Кстати, Вайсеровский мод CUT отлично отрабатывает на 2.3.1 + mjournal 2.1

Ссылка на комментарий
Поделиться на других сайтах

WildCat, значит, не судьба :D

 

Ставить 2.3.1 с дневниками 2.1, чтобы переделать мод под них, я не буду... Надо тогда, чтобы кто-то оформил и выложил "вайсеровский кат" для этой версии.

Ссылка на комментарий
Поделиться на других сайтах

Вайсеровский мод встает вообще без каких-либо изменений! У меня был в 2.1.7 cut в постах, после перехода на 2.3.1 тег ессесно повис среди мессаг в виде текста [cut]. Мод поставил - всё ок, обрезалось как было раньше, проверил новые сообщения - проблем нет.
Ссылка на комментарий
Поделиться на других сайтах

Ну я не знаю, почему Вайсер этого не сделал... Вынес его мод в архив... Изменено пользователем WildCat
Ссылка на комментарий
Поделиться на других сайтах

Вообще-то в этом подфоруме темы оформляются так: один мод - одна тема. У нас с Vic'er-ом разные моды. Мой позволяет вводить свой текст для продолжения, скрывать участки текста (включая вставленные в текст аттачи) внутри записи, а не только продолжение, и требует меньше правок. Правда, почему-то не работает на 2.3.1/2.1.

 

Поставила только что у себя на домашнем компе дневники 2.1 на форум 2.2 - все работает :D кнопка не появляется, если в настройках дневников стоит "Шаблоны из PHP файлов?" - "Нет" (моя инструкция подразумевает, что шаблоны берутся из файлов). А этот глюк

в старых записях где есть аттачи картикок. они не все отображаются или отображается только одна из пяти например вместо них теги [атач=234] [атач=235] [атач=236] и т.п.
мне пока не удалось воспроизвести.
Ссылка на комментарий
Поделиться на других сайтах

мне пока не удалось воспроизвести.
У меня такое случилось в посте, где было около 15 аттачей, отобразился только последний. Причем это случилось еще до использования ката в данном посте - установил мод, выполнил все изменения и картинки исчезли. Изменено пользователем WildCat
Ссылка на комментарий
Поделиться на других сайтах

WildCat, догадаться, что там у вас происходило, я не могу, увидеть тоже... воспроизвести тоже - я даже поставила ipb 2.3.1 и долго загружала картинки в дневник. Увы, не получилось поймать баг.

 

Раз мод в принципе работает на 2.3.1/2.1, не могу себе представить, почему на этих версиях могут возникнуть баги, которых пока никто не обнаружил на моем форуме (ipb2.0/mJournal 2.07, 1700 записей, содержащих строку "[cut", куча аттачей), а также на паре других, где этот мод установлен.

Ссылка на комментарий
Поделиться на других сайтах

WildCat, так что с того :D сколько раз мои пользователи жаловались на несуществующие глюки... и потом отписывались в теме технической поддержки "ой, а теперь все работает".

 

Если мне удастся этот глюк поймать, или если кто-то хотя бы мне его покажет - можно будет исправить.

Ссылка на комментарий
Поделиться на других сайтах

WildCat

У меня стоит этот хак на форуме и все Ок.

 

Как я понял ты ставил его на mjournal 2.1 public beta 1, а хак для mJournal 2.07.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.