X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Парсер тегов RC5
Djadka
сообщение 2012-02-13, 8:49
Сообщение #1
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 463
Регистрация: 2010-10-17

Репутация:   нет  
Всего: нет


Написал тут что бы теги при добавлени статьи подсвечивались, выкладываю на ваш суд. Добавить надо в файл /classes/other/class_editor.php
$text = $this->_ParseTag($text);

Примерна на строки 265-266 перед return $text;
и после любой функции добавить ниже функцию.
private function _ParseTag($text)
	{
		set_time_limit(300000);
		$tags=$this->Mainclass->Db->Query('SELECT `name` FROM `f_news_tags`',__file__,__line__);
		$g = false;
		$td = NULL;
		$m = $ma = $update = array();
		
		#Теги, приходиться обрабатывать
		while($t=$this->Mainclass->Db->Fetch_row($tags))
		{
			
			(string)$t[0]=strtolower((string)$t[0]);# в нижний регистр всё
			// if(empty($t[0])) continue;
			if(strcasecmp($td,$t[0])!=0)# Сраниваев строки с предыдущим, а то бывает повторяется
			{
				
				$tag[]=str_replace(array('“','”','„','"'), '',(string)$t[0]);
			}
			$td=$t[0];//Записываем для сравнения с предыдущим
		}

		$tag = array_unique($tag);//По сути то же отрезаем повторяющиеся
	

		foreach($tag as &$t)
		{
			if(stripos($text, $t)!==false)
			{
				$leng = strlen($t);
				$url_tag =urlencode($t);

				
				preg_match_all('/.{0,20}'. $t .'.{0,20}/i', $text, $ma, PREG_OFFSET_CAPTURE);
				

				if (!empty($ma)) {
					
					foreach($ma[0] as $ke => &$v) {
						if(preg_match('/title=.*'.$t.'.*/i',$v[0])) {
							unset($ma[0][$ke]);
							continue;
						}

						if(preg_match('/alt=.*'.$t.'.*/i',$v[0])) {
							unset($ma[0][$ke]);
							continue;
						}
						
						if(preg_match('/src=.*'.$t.'.*/i',$v[0])) {
							unset($ma[0][$ke]);
							continue;
						}

						if(preg_match('/href=.*'.$t.'.*/i',$v[0])) {
							unset($ma[0][$ke]);
							continue;
						}
					}

					unset($v, $ke);
					
					if (!empty($ma)) {
					
						foreach($ma[0] as $k => &$v) {
							$word = substr($text, (int)$v[1]+20, $leng);
							$left = substr($text, (int)$v[1]+19, 1);
							$right = substr($text, (int)$v[1]+20+$leng, 1);

							if(!preg_match('/[\w]/',(string)$left))
							{
								if(!preg_match('/[\w]/',(string)$right))
								{
									$update[$k] = $v[0];
									$up = '<a href="news/tag_'.$url_tag.'.html">'.$word.'</a>';
									$m[$k] = mb_eregi_replace($t, $up, $v[0]);
									$g = true;
								}
							}
						}
						
						unset($v, $ke);
					}
				}
			}
		}
		
		if($g) {
			return str_replace($update,$m,$text);
		} else return $text;
	}


Сообщение отредактировал Djadka - 2012-02-14, 21:37
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2012-02-14, 8:22
Сообщение #2
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (Djadka @ 2024-03-29 16:30)
Примерна на строки 265-266 перед return $text;
и после любой функции добавить ниже функцию.

В какой файл? Видимо в класс какой-то...
И он всю базу тегов перерабатывает судя по всему?
Цитата (Djadka @ 2024-03-29 16:30)
Написал тут что бы теги при добавлени статьи подсвечивались, выкладываю на ваш суд. Добавить надо

Опять же, куда добавить-то? :blink:
Перейти в начало страницы
+Цитировать сообщение
Djadka
сообщение 2012-02-14, 21:38
Сообщение #3
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 463
Регистрация: 2010-10-17

Репутация:   нет  
Всего: нет


Да всю базу перабатывает, сейчас надо оттестить и сделаю файл уже который пропарсит уже имеющие новости. Изменил первую новость
Перейти в начало страницы
+Цитировать сообщение

Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0336 сек.    11 запросов    GZIP включен    Сейчас: 2024-03-29, 16:30