Перейти к содержанию

Функция удаления


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

какая функция удаляет например ipsSpoiler из контента на страницах профиля, поиска и т.д.? Либо я туплю, но функция public static function removeElements в IPS\Text\Parser ничего не удаляет

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

Движок указанной функцией обрезает теги, например здесь system/Content/Search/Index

/* Strip spoilers */
		$content = $object->searchIndexContent();
		if ( preg_match( '#<div\s+?class=["\']ipsSpoiler["\']#', $content ) )
		{
			$content = \IPS\Text\Parser::removeElements( $content, array( 'div[class=ipsSpoiler]' ) );
		}
		
		/* Take the HTML out of the content */
		$content = trim( str_replace( \chr(0xC2) . \chr(0xA0), ' ', strip_tags( preg_replace( "/(<br(?: \/)?>|<\/p>)/i", ' ', preg_replace( "#<blockquote(?:[^>]+?)>.+?(?<!<blockquote)</blockquote>#s", " ", preg_replace( "#<script(.*?)>(.*)</script>#uis", "", ' ' . $content . ' ' ) ) ) ) ) );

 

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

3 минуты назад, Respected сказал:

Движок указанной функцией обрезает теги, например здесь system/Content/Search/Index


/* Strip spoilers */
		$content = $object->searchIndexContent();
		if ( preg_match( '#<div\s+?class=["\']ipsSpoiler["\']#', $content ) )
		{
			$content = \IPS\Text\Parser::removeElements( $content, array( 'div[class=ipsSpoiler]' ) );
		}
		
		/* Take the HTML out of the content */
		$content = trim( str_replace( \chr(0xC2) . \chr(0xA0), ' ', strip_tags( preg_replace( "/(<br(?: \/)?>|<\/p>)/i", ' ', preg_replace( "#<blockquote(?:[^>]+?)>.+?(?<!<blockquote)</blockquote>#s", " ", preg_replace( "#<script(.*?)>(.*)</script>#uis", "", ' ' . $content . ' ' ) ) ) ) ) );

 

тогда какой он удаляет то, что находится в ipsSpoiler ?

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

Так этой строкой и удаляет 

$content = \IPS\Text\Parser::removeElements( $content, array( 'div[class=ipsSpoiler]' ) );

 

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

3 часа назад, Respected сказал:

Так этой строкой и удаляет 


$content = \IPS\Text\Parser::removeElements( $content, array( 'div[class=ipsSpoiler]' ) );

 

что-то у меня локальный сервер развалился, контент не обновлялся и хук не срабатывал, а так все работает правильно.

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

/**
	 * Remove specific elements, useful for cleaning up content for display or truncating
	 *
	 * @param	string				$value			The value to parse
	 * @param	array|string		$elements		Element to remove, or array of elements to remove. Can be in format "element[attribute=value]"
	 * @return	string
	 */
	public static function removeElements( $value, $elements=array( 'blockquote', 'img', 'a' ) )
	{
		array_push($elements, 'div[class=my_spoiler]');
		return parent::removeElements( $value, $elements );
	}

я попробовал добавить элемент глобально, он удаляет его в приложении страниц (главная страница со списком статей), но не удаляет в профиле, страниц с результатами поиска и т.д.

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

Через truncated тоже удаляет только в приложении страниц

/**
	 * Removes HTML and optionally truncates content
	 *
	 * @param	bool		$oneLine	If TRUE, will use spaces instead of line breaks. Useful if using a single line display.
	 * @param	int|null	$length		If supplied, and $oneLine is set to TRUE, the returned content will be truncated to this length
	 * @return	string
	 * @note	For now we are removing all HTML. If we decide to change this to remove specific tags in future, we can use \IPS\Text\Parser::removeElements( $this->content() )
	 */
	static public function truncate( $content, $oneLine=false, $length=500 )
	{
		$content = static::removeElements( $content, array( 'div[class=my_spoiler]' ) );
		return parent::truncate( $content, $oneLine, $length );
	}

у меня уже мозг плавится, не понимаю как удалить в профиле и т.д.

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

я так понял это делается через public function indexData( \IPS\Content\Searchable $object ) в IPS\Content\Search\Index
как правильно захукать код, чтобы добавить в него \IPS\Text\Parser::removeElements( $content, array( 'div[class=my_spoiler]' ) );

?

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

7 часов назад, WaNted сказал:

Глянь \IPS\Content\Search\Result::preDisplay

там вроде везде уже отформатированный текст выводит. Я нашел обходной путь, так как в public function indexData() вызывается searchIndexContent(), я просто в IPS\Content в эту функцию запилил \IPS\Text\Parser::removeElements( $content, array( 'div[class=my_spoiler]' ) );

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

Не нашел рабочего хайда под новую версию ips, пришлось писать самому. Как вам идея хайда под ранг пользователя? Так как ранг пользователя гибок к настройкам, а пользователь сам решает какими путями его получить, думаю это самый топ вариант.
hide12.thumb.png.b7fc5dd5715643c3295aed5bd87851d5.png

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

  • 2 месяца спустя...

ZIKURIK отличная идея. А есть уже рабочая версия?

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

38 минут назад, Dobrochas сказал:

ZIKURIK отличная идея. А есть уже рабочая версия?

Работает на одном из моих проектов который я запущу скорее всего на неделе. А так в паблике если и будет то будет платная версия

Еще реализовал чью-то идею, кто-то хотел спойлер с редактируемым заголовком. Второй спойлер кастомный:1326523337__2021-09-14_184900.thumb.png.f9e9cc78af536f87f19b420c8d5e65f8.png

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

  • 3 недели спустя...

@ZIKURIK спойлер тоже будет платный?

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

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

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

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

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

  Разрешено использовать не более 75 эмодзи.

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

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

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...