我有模型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个问题:
当我在我的localhost页面上测试httpresponce时它找不到它们,当我在网页上测试时,一切正常。
(选中http://localhost:8080/category/page
等链接,类别为第一个模块,页面为isecond,主页为模块:类别,操作:索引,类别/页面为模块路径:页面,操作:显示)
生成的链接类仍为<?php Wiki::httpresponse($\\1) ?>
方法httpresponce未执行。
可以做些什么? 也许有更好的方法来完成这项任务?
答案 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;
}