Работа с блоками(шаблоны)

Emeron

Новичок
Здравствуйте, сейчас я занимаюсь шаблонами и передо мной возникло два вопроса.
Первый. Мне нужно было удалить блок "[block]...[/block]" и его содержимое в строке ниже:

PHP:
<?php
$str = "
<table>
	<tr>Строка1</tr>
	[block]
	<tr>Строка2</tr>
	[/block]
</table>";

$test = new test();
echo $test->replaceBlock( "block", "", $str );//Выводит очищенную строку(если блок найден)

class test
{
	public function replaceBlock( $search_tag, $replace, $str )
	{
		$block = preg_match( "/\[{$search_tag}\](.*)\[\/{$search_tag}\]/Uis", $str, $matches );
		if( $block == 1 )
		{
			$str = str_replace( $matches[0], $replace, $str );
			return $str;
		}
		else
			return false;
	}
}
?>
Можно ли это сделать проще, либо это самый простой способ?
Второй вопрос. Если блок мне нужен, как лучше очистить строку выше от тегов "[block]" и "[/block]", оставив содержимое блоков "<tr>Строка2</tr>" не тронутым?
Вот такой вопрос. Заранее спасибо!
 

Фанат

oncle terrible
Команда форума
Да нормальный способ. Тем более, что обычно содержимое блока надо в любом случае получить в переменную, чтобы, к примеру, проитерировать, и только потом заменять.
Второй вопрос довольно необычный. Для чего такое может понадобиться?

PS для активистов: писать не по теме настоятельно не рекомендую.
 

tz-lom

Продвинутый новичок
Второй вопрос. Если блок мне нужен, как лучше очистить строку выше от тегов "[block]" и "[/block]", оставив содержимое блоков "<tr>Строка2</tr>" не тронутым?
посмотри что у тебя preg_match выдаёт,у тебя уже есть в регулярке группировка в которую будет попадать содержимое блока
а потом подменяешь в строке $matches[0] на $matches[1]
 

Emeron

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

PS для активистов: писать не по теме настоятельно не рекомендую.
Разблокирование блока(второй случай) нужно для того, чтобы, в случае, если блок должен быть задействован, снять с него лишние теги(зачем они, ведь будут портить весь вид сайта). Иначе же блок нужно удалить, но это уже первый случай: $test->replaceBlock().
rotoZOOM, не.

Функцию ниже можно использовать, но хотелось бы одним регулярным выражением избавиться от тегов блока:

Код:
function unlockBlock( $block_name, $str )
{
	$str = str_replace( "[{$search_tag}]", "", $str );
	$str = str_replace( "[/{$search_tag}]", "", $str );
	return $str;
}
посмотри что у тебя preg_match выдаёт,у тебя уже есть в регулярке группировка в которую будет попадать содержимое блока
а потом подменяешь в строке $matches[0] на $matches[1]
tz-lom, это сразу 2 действия: нахождение, замена. Мне же нужно одно действие - очистка от тегов через регулярное выражение.
 
Сверху