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

Тема в разделе "PHP", создана пользователем 4erepaha13, 2 сен 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. 4erepaha13

    4erepaha13

    Регистр.:
    20 июн 2009
    Сообщения:
    155
    Симпатии:
    17
    Подскажите решение следующей задачи:
    Есть текстовый файл с перечнем слов, каждое в отдельной строке.
    Нужно в шаблон встроить инклюд пхп скрипта, который бы обращаясь к этому файлу преобразовывал список слов в список анкоров, типа
    нога - > <a href="http://moysite.ru/index.php?tag=нога">нога</a>
     
  2. Sanja_

    Sanja_ Создатель

    Регистр.:
    9 окт 2009
    Сообщения:
    27
    Симпатии:
    8
    вот попробуйте
    PHP:
    <?
    $file="tags.txt";// имя файла
    $text file($file);
    foreach(
    $text as $tags) echo "<a href='http://site.ru/index.php?tag=".rtrim($tags)."'>{$tags}</a>";
    ?>
     
    4erepaha13 нравится это.
  3. zm8

    zm8 Постоялец

    Регистр.:
    26 июн 2007
    Сообщения:
    133
    Симпатии:
    21
    Если генерировать облако тэгов, то размер шрифта должен быть разный :)
    PHP:
    <? 
    $size mt_rand(1,10);
    echo 
    "<font size=$size>Link</font>";
    ?>
     
    4erepaha13 нравится это.
  4. ec_stasis

    ec_stasis Создатель

    Регистр.:
    5 июл 2010
    Сообщения:
    24
    Симпатии:
    3
    Обычно размер ссылки зависит от количества чего-бы-там под этим тегом.
     
  5. 4erepaha13

    4erepaha13

    Регистр.:
    20 июн 2009
    Сообщения:
    155
    Симпатии:
    17
    zm8, кстати да - придает живости и разнообразия.

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

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    только если загрузить страницу и спарсить 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($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_CONNECTTIMEOUT12);
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    $page curl_exec($ch); curl_close($ch);
    preg_match('/<title>([^<]*?)<\/title>/is',$page,$title);
    echo 
    $title[1];
    но если стягивать нужно часто, лучше сделать буферный файл
     
    4erepaha13 нравится это.
  7. 4erepaha13

    4erepaha13

    Регистр.:
    20 июн 2009
    Сообщения:
    155
    Симпатии:
    17
    а часто-нечасто можно примерное количество озвучить таких запросов, чтобы не нагрузить хостинг\трафик,
    типа "если малопосещаемый сайт - до 200 ссылок допустимо"
    UP. и еще бок вылазит - кодировка разная у титлов
     
  8. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    это зависит от хостера, но оптимальнее/быстрее пользоваться буфером

    например такой код, проверяет наличие 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;
     
  9. 4erepaha13

    4erepaha13

    Регистр.:
    20 июн 2009
    Сообщения:
    155
    Симпатии:
    17
    а почему для титле регулярка ([^<]*?), а не ([^<]*)- все что угодно кроме "<" любой длины
    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;
    }
    ?>
     
  10. Coffin

    Coffin Создатель

    Регистр.:
    12 апр 2006
    Сообщения:
    10
    Симпатии:
    1
    Вобще для генерации облака тегов создается отдельная табличка в которой хранятся все теги и кол-во упоминианий и в зависимости от кол-ва идет увеличение размера шрифта. Ну и кол-во выводимых тегов тоже влияет на размер. Прочитайте мат часть про облако тегов.
     
Статус темы:
Закрыта.