2012-07-31 95 views
1

即時通訊試圖開發一個短代碼替代品,但不能真正得到它的竅門。我想要做的是,用戶可以寫[幻燈片] 10 [/幻燈片]之類的東西,然後製作幻燈片,其ID號爲10。這是據我已經來了:用php代碼或函數替換shortcode字符串?

$slideArray = array(preg_match_all('/\[slideshow\](.*?)\[\/slideshow\]/is', $post, $matches)); 

有了這個,我則:

for ($o = 0; $o <= $count; $o++) 
    { 
    $query = mysql_query("SELECT * FROM slideshow WHERE id = ''. $matches[1][$o]. '' LIMIT 1"); 
    while ($row = mysql_fetch_assoc($query)) 
    { 
    // Slideshow code appears here 
    } 
} 

這工作,但現在我有,如果幻燈片出現在後或底部的頂部來決定。但是,如果我想讓這個幻燈片出現在用戶寫的地方。所以它可能會出現在文本中間的示例中。然後是否可以創建此函數,然後使用preg_replace用上面的查詢代碼替換[幻燈片] 10 [/幻燈片]。我很抱歉我的英文不好。

問候

+1

我強烈建議您[谷歌「PHP BBCode分析器」](http://www.google.com/search?q=PHP+BBCode+parser) – DaveRandom 2012-07-31 10:24:26

+0

我有,但所有的結果只是顯示你如何使一個鏈接或一些文本粗體,那不是什麼即時看f要麼。我想用mysql查詢和它的結果替換一個shortcode字符串。 – Paparappa 2012-07-31 10:26:12

+1

您需要爲替換操作提供回調函數。例如,在[NBBC](http://nbbc.sourceforge.net/)中,您設置了''mode'=> BBCODE_MODE_CALLBACK',並在創建規則時向方法鍵提供回調,這將允許您從MySQL中取出替換字符串。 – DaveRandom 2012-07-31 10:31:16

回答

1

添加像這樣的 「//幻燈片代碼將出現在這裏」 區域

$post = str_replace($matches[0][$o], $row['slideshowfield'], $post); 

所有代碼都應該是這個樣子:

preg_match_all('/\[slideshow\](.*?)\[\/slideshow\]/Usi', $post, $matches); 

if(!empty($matches[1])){ 
    foreach($matches[1] as $o => $slideshow_id){ 
     $query = mysql_query("SELECT * FROM slideshow WHERE id = '". (int)$slideshow_id. "' LIMIT 1"); 
     if($row = mysql_fetch_array($query)){ 
      $post = str_replace($matches[0][$o], $row['slideshow_html_fieldname'], $post); 
     } 
    } 
}