维基风格的链接。如果目标页面不存在,如何更改链接的颜色

时间:2013-02-24 16:07:08

标签: php symfony1 symfony-1.4 propel

我有模型WikiPage。 WikiPage->我从数据库获得的文本。我制作方法“wikify”并按类编辑生成文本:: wikify($ Page-> getText())。 在文本中我有构造[链接名称],我生成链接:

$text = preg_replace('@\[(.*) (.*)\]@', '<a href="\\1" class="<?php Wiki::httpresponse($\\1) ?>">\\2</a>', $text);

我们的想法是检查带有功能httpresponse的网址,如果没有网页则更改类。

httpresponce:

static public function httpresponse($url){
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_FAILONERROR, true); 
    curl_exec ($ch); 
    $intReturnCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close ($ch); 
    if ($intReturnCode != 200 && $intReturnCode != 302 && $intReturnCode != 304) { return "red"; } else return "blue";
}

2个问题:

  1. 当我在我的localhost页面上测试httpresponce时它找不到它们,当我在网页上测试时,一切正常。

    (选中http://localhost:8080/category/page等链接,类别为第一个模块,页面为isecond,主页为模块:类别,操作:索引,类别/页面为模块路径:页面,操作:显示)

  2. 生成的链接类仍为<?php Wiki::httpresponse($\\1) ?>方法httpresponce未执行。

  3. 可以做些什么? 也许有更好的方法来完成这项任务?

1 个答案:

答案 0 :(得分:0)

找到了解决方案。

$reg_inURL = "@\[(\w*)\/(\w*) (.*)\]\]@";
   preg_match_all($reg_inURL, $text, $matches);
   $count = 0;
   $links = count($matches[0]);
   foreach ($matches[0] as $pattern)
   {
    $cat = $matches[1][$count];
    $pag = $matches[2][$count];

    $q = WikiPageQuery::create()
        ->leftJoin('WikiPage.WikiCategory')
        ->where('WikiCategory.category_address = ?', $cat)
        ->filterByAddress($pag)
        ->findOne();
    if (!$q)
    {
        $link_class = 'red';
        $url = $cat.'/add';
    }
    else 
    {
        $link_class = 'blue';
        $url = $cat.'/'.$pag;
    }

    $title = $matches[3][$count];
    $text = str_replace  ($pattern, '<a href='.$url.' class='.$link_class.'>'.$title.'</a>', $text);
    $count = $count+1;
   }