валидация тега <cut>
Сейчас занимаюсь созданием сайта на базе данной CMS. Может кто-то обвинит меня в излишней скурпулезности, но я люблю чтобы мои сайты были валидными. Вопрос в тэге
открываем файл classes/actions/ActionTopic.class.php
в этом файле есть два интересующих нас метода:
— SubmitAdd() — обработка добавления топика
— SubmitEdit($oTopic) — обработка редактирования топика
необходимо внести в них небольшую поправку.
SubmitAdd()
так выглядит метод
добавили строчку $sText=preg_replace("/<cut(.*)>/Ui","",$sText); которая как раз и уберет ненужный нам тэг.
аналогичную операцию нужно осуществить в методе SubmitEdit($oTopic)
теперь проблем с валидацией тега «cut» нет.
Надеюсь что кому-то помог, в следующей статье расскажу как свалидировать видео, так как flash проигрыватели иногда не проходят валидацию.
<cut>
, дело в том что этот тэг является не HTML тэгом, а внутренним тэгом CMS, и поэтому в коде страниц этого тэга быть не должно во избежание всяческих эксцессов. При добавлении или редактировании топика данный тэг не удаляется из текста топика после разбиения его на анонс и полный текст. Я поступил следующим образом:открываем файл classes/actions/ActionTopic.class.php
в этом файле есть два интересующих нас метода:
— SubmitAdd() — обработка добавления топика
— SubmitEdit($oTopic) — обработка редактирования топика
необходимо внести в них небольшую поправку.
SubmitAdd()
так выглядит метод
/**
* Создаёт анонс топика(обрезаем по тег <cut>)
*/
$sTestShort=$sText;
$sTextTemp=str_replace("\r\n",'[<rn>]',$sText);
$sTextTemp=str_replace("\n",'[<n>]',$sTextTemp);
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) {
$sTestShort=$aMatch[1];
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*$/Ui',$aMatch[2],$aMatchCut)) {
$oTopic->setCutText(trim($aMatchCut[1]));
}
}
$sTestShort=str_replace('[<rn>]',"\r\n",$sTestShort);
$sTestShort=str_replace('[<n>]',"\r\n",$sTestShort);
$oTopic->setText($sText);
$oTopic->setTextShort($sTestShort);
$oTopic->setTextSource(getRequest('topic_text'));
$oTopic->setTags(getRequest('topic_tags'));
$oTopic->setDateAdd(date("Y-m-d H:i:s"));
$oTopic->setUserIp(func_getIp());
/**
* Создаёт анонс топика(обрезаем по тег <cut>)
*/
$sTestShort=$sText;
$sTextTemp=str_replace("\r\n",'[<rn>]',$sText);
$sTextTemp=str_replace("\n",'[<n>]',$sTextTemp);
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) {
$sTestShort=$aMatch[1];
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*$/Ui',$aMatch[2],$aMatchCut)) {
$oTopic->setCutText(trim($aMatchCut[1]));
}
}
$sTestShort=str_replace('[<rn>]',"\r\n",$sTestShort);
$sTestShort=str_replace('[<n>]',"\r\n",$sTestShort);
//вот эту строчку нужно добавить
$sText=preg_replace("/<cut(.*)>/Ui","",$sText);
$oTopic->setText($sText);
$oTopic->setTextShort($sTestShort);
$oTopic->setTextSource(getRequest('topic_text'));
$oTopic->setTags(getRequest('topic_tags'));
$oTopic->setDateAdd(date("Y-m-d H:i:s"));
$oTopic->setUserIp(func_getIp());
добавили строчку $sText=preg_replace("/<cut(.*)>/Ui","",$sText); которая как раз и уберет ненужный нам тэг.
аналогичную операцию нужно осуществить в методе SubmitEdit($oTopic)
/**
* Парсим на предмет ХТМЛ тегов
*/
$sText=$this->Text_Parser(getRequest('topic_text'));
$sTestShort=$sText;
$sTextTemp=str_replace("\r\n",'[<rn>]',$sText);
$sTextTemp=str_replace("\n",'[<n>]',$sTextTemp);
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) {
$sTestShort=$aMatch[1];
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*$/Ui',$aMatch[2],$aMatchCut)) {
$oTopic->setCutText(trim($aMatchCut[1]));
}
}
$sTestShort=str_replace('[<rn>]',"\r\n",$sTestShort);
$sTestShort=str_replace('[<n>]',"\r\n",$sTestShort);
//вот эту строчку нужно добавить
$sText=preg_replace("/<cut(.*)>/Ui","",$sText);
$oTopic->setText($sText);
$oTopic->setTextShort($sTestShort);
$oTopic->setTextSource(getRequest('topic_text'));
$oTopic->setTags(getRequest('topic_tags'));
$oTopic->setUserIp(func_getIp());
теперь проблем с валидацией тега «cut» нет.
Надеюсь что кому-то помог, в следующей статье расскажу как свалидировать видео, так как flash проигрыватели иногда не проходят валидацию.
13 комментариев
-короткий(анонс) — то что до тэга
-полный — тот который выводится
-редактируемый — это полный текст со всеми тегами
вот в редактируемом тег остается, а в полном вырезается. Таким образом мы убираем тег только из выдачи в браузер.
Да, да.
Вот тут
$oTopic->setTextSource(getRequest('topic_text'));
а уже когда просматриваешь исходный код сформированной страницы там [cut/]
Решение работает для вновь написанных материалов или переизданных старых