Генератор облака тегов

Статус
В этой теме нельзя размещать новые ответы.

4erepaha13

Полезный
Регистрация
20 Июн 2009
Сообщения
157
Реакции
18
Подскажите решение следующей задачи:
Есть текстовый файл с перечнем слов, каждое в отдельной строке.
Нужно в шаблон встроить инклюд пхп скрипта, который бы обращаясь к этому файлу преобразовывал список слов в список анкоров, типа
нога - > <a href="http://moysite.ru/index.php?tag=нога">нога</a>
 
вот попробуйте
PHP:
<?
$file="tags.txt";// имя файла
$text = file($file);
foreach($text as $tags) echo "<a href='http://site.ru/index.php?tag=".rtrim($tags)."'>{$tags}</a>";
?>
 
Если генерировать облако тэгов, то размер шрифта должен быть разный :)
PHP:
<? 
$size = mt_rand(1,10);
echo "<font size=$size>Link</font>";
?>
 
Обычно размер ссылки зависит от количества чего-бы-там под этим тегом.
 
zm8, кстати да - придает живости и разнообразия.

Я сейчас другим озадачился, нашел код, который вытягивает из сапоссылки ее урл
PHP:
$sape_text = $sape->return_links();
    $sape_link = preg_replace('~.*<a[^>]+href="http://([^/\s"]+)[^\s"]*"[^>]*>.*~si', '$1', $sape_text);
А вот каким запросом теперь выдрать Title страницы, на которую ведет этот урл? (чтобы разбавить текстом продажные ссылки выглядящие как набор слов "окна. страхование. хостинг дешево" )
 
только если загрузить страницу и спарсить title
PHP:
preg_match('/<title>([^<]*?)<\/title>/is',file_get_contents('http://'.$sape_link),$title);
echo $title[1];

или курлом
PHP:
$ch = curl_init('http://'.$sape_link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$page = curl_exec($ch); curl_close($ch);
preg_match('/<title>([^<]*?)<\/title>/is',$page,$title);
echo $title[1];
но если стягивать нужно часто, лучше сделать буферный файл
 
а часто-нечасто можно примерное количество озвучить таких запросов, чтобы не нагрузить хостинг\трафик,
типа "если малопосещаемый сайт - до 200 ссылок допустимо"
UP. и еще бок вылазит - кодировка разная у титлов
 
это зависит от хостера, но оптимальнее/быстрее пользоваться буфером

например такой код, проверяет наличие title в буфере, и далее исп. буферные данные(старый url) или парсит/сохраняет (новый url)
кодировка буфера настраивается

PHP:
// $sape_link = 'www.mail.ru';
$base = 'title_db.txt'; // буфер
$main_encode = 'windows-1251';  // требуемая кодировка

is_file($base) OR file_put_contents($base,''); // создаем буфер
$tile_arr = unserialize(file_get_contents($base));
if(strlen($tile_arr[$sape_link])) $sape_title = $tile_arr[$sape_link]; // url есть в буфере
else { $tile_arr[$sape_link] = get_title($sape_link,$main_encode);
file_put_contents($base,serialize($tile_arr)); $sape_title = $tile_arr[$sape_link]; }  // url нет в буфере - сохраняем

function get_title($link,$encode) {
$page = file_get_contents('http://'.$link);
preg_match('/<title>([^<]*?)<\/title>/is',$page,$title); // title
preg_match('/charset=([^">]+)"/i',$page,$charset); // опред. кодировку
strlen($charset[1]) OR $charset[1]=mb_detect_encoding($title[1],"utf-8,windows-1251"); // если кодировка не определилась
$s_title=@mb_convert_encoding($title[1],$encode,$charset[1]);
return $s_title; }
// result
echo $sape_title;
 
а почему для титле регулярка ([^<]*?), а не ([^<]*)- все что угодно кроме "<" любой длины
PS в качесте альтернативного решения кеширования (для WP) нашел такой способ- полная запись всего содержимого страницы
PHP:
<?php
$filename = 'cache/'.md5($_SERVER['REQUEST_URI']).'.html'; 
 
$cached = false; 
 
if (file_exists($filename)) {
if ((time()-filemtime($filename))<6160) {
$cached = true;
} else {
unlink($filename);
$cached = false;
}
} 
 
if ($cached) {
readfile($filename);
} else {
ob_start(); 
 
// WP
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
// 
 
$text = ob_get_clean(); 
 
$fh = fopen($filename, 'w+');
fwrite($fh, $text);
fclose($fh); 
 
echo $text;
}
?>
 
Вобще для генерации облака тегов создается отдельная табличка в которой хранятся все теги и кол-во упоминианий и в зависимости от кол-ва идет увеличение размера шрифта. Ну и кол-во выводимых тегов тоже влияет на размер. Прочитайте мат часть про облако тегов.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху