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

Тэг 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.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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