0

我有模型维基页面。WikiPage->我从数据库中获取的文本。我创建了方法“wikify”并按类::wikify($Page->getText()) 在页面上生成文本。在文本中我有构造 [链接名称],我用这个生成链接:

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

这个想法是使用函数 httpresponse 检查 url,如果没有页面则更改类。

http响应:

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. 当我在我的本地主机页面上测试 httpresponce 时,它​​没有找到它们,当我在网页上测试它时,一切正常。

    (检查链接如http://localhost:8080/category/page,类别是第一个模块,页面是第二个,主页是模块:类别,操作:索引,类别/页面是模块的路由:页面,操作:显示)

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

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

4

1 回答 1

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;
   }
于 2013-02-25T05:24:01.417 回答