我有一篇用HTML格式化的文章。它包含许多行话词,也许有些人不理解。
我还有一个术语表(MySQL表),其定义对那些人有帮助。
我想浏览我的文章的HTML并查找这些词汇表术语的实例,并用一些不错的JavaScript替换它们,这些JavaScript将显示带有术语定义的“工具提示”。
我差不多完成了这个,但我仍然遇到了一些问题:
这是我的代码:
$query_glossary = "SELECT word FROM glossary_terms WHERE status = 1 ORDER BY LENGTH(word) DESC";
$result_glossary = mysql_query_run($query_glossary);
//reset mysql via seek so we don't have to do the query again
mysql_data_seek($result_glossary,0);
while($glossary = mysql_fetch_array($result_glossary)) {
//once done we can replace the words with a nice tip
$glossary_word = $glossary['word'];
$glossary_word = preg_quote($glossary_word,'/');
$article['content'] = preg_replace_callback('/[\s]('.$glossary_word.')[\s](.*?>)/i','article_checkOpenTag',$article['content'],10);
}
这是PHP函数:
function article_checkOpenTag($matches) {
if (strpos($matches[0], '<') === false) {
return $matches[0];
}
else {
$query_term = "SELECT word,glossary_term_id,info FROM glossary_terms WHERE word = '".escape($matches[1])."'";
$result_term = mysql_query_run($query_term);
$term = mysql_fetch_array($result_term);
# CREATING A RELEVENT LINK
$glossary_id = $term['glossary_term_id'];
$glossary_link = SITEURL.'/glossary/term/'.string_to_url($term['word']).'-'.$term['glossary_term_id'];
# SOME DESCRIPTION STUFF FOR THE TOOLTIP
if(strlen($term['info'])>400) {
$glossary_info = substr(strip_tags($term['info']),0,350).' ...<br /> <a href="'.$glossary_link.'">Read More</a>';
}
else {
$glossary_info = $term['info'];
}
return ' <a href="javascript:;" onmouseout="UnTip();" class="article_jargon_highligher" onmouseover="'.tooltip_javascript('<a href="'.$glossary_link.'">'.$term['word'].'</a>',$glossary_info,400,1,0,1).'">'.$matches[1].'</a> '.$matches[2];
}
}
答案 0 :(得分:1)
将负载从服务器移动到客户端。假设您的“俚语词典”不经常更改并且您想要在很多文章中“添加漂亮的工具提示”,您可以将其导出到.js文件中并添加相应的&lt; script&gt;进入你的页面 - 只是一个可以通过网络浏览器轻松缓存的静态文件。
然后编写一个客户端js脚本,试图找到一个dom节点,其中放置了“带有俚语的内容”,然后解析出你的字典中出现的单词并用一些html包装它们来显示提示。一切都与js,客户端的一切。
如果方法不合适并且您要在php后端中完成工作,至少要考虑对已处理内容进行一些缓存。
我还看到您为内容中找到的每个“行话词”插入说明文字。如果一篇文章在文章中非常频繁怎么办?你得到了开销。将这些描述分开,将它们作为对象放入JS中。任务是找到具有描述的单词并使用一些短标记来标记它们,例如&lt; em&gt;。你的js-script应该找到em`s,从对象中选择一个描述(关联数组和单词的描述)并在“mouse over”事件上动态构造工具提示。
答案 1 :(得分:0)
有趣的是,我正在寻找的不是像你这样的问题,但在阅读时我意识到你的问题是我很久以前经历过的问题
它基本上是一个解析字典并吐出增强HTML的系统。
我的建议包括:
I elaborated a solution on my blog(法语,对不起)。但它基本上概述了你可以实际用来做的事情。
我将其称为“ContentAbbrGenerator”作为MODx插件。但插件的原始可以在已建立的结构之外应用。
无论如何,您可以下载zip文件并获取RegExes并找到解决方法。
我的目标
我做了什么
基本上你给的文字更具语义性。
想象一下以下词典:
en;abbr;HTML;Hyper Text Markup Language;es
en;abbr;abbr;Abbreviation
然后,CMS输入的内容可能会吐出如下文本:
<p>Have you ever wanted to do not hassle with HTML abbr tags but was too lazy to hand-code them all!? That is my solution :)</p>
这被翻译成:
<p>Have you ever wanted to do not hassle with <abbr title="Hyper Text Markup Language" lang="es">HTML</abbr> <abbr title="Abbreviation">abbr</abbr> tags but was too lazy to hand-code them all!? That is my solution :)</p>
全部取决于您可以从数据库生成的一个CSV文件。
我使用的约定
工具提示
我强烈建议您使用甚至Twitter Bootstrap实现的工具提示工具。它基本上会读取您想要的任何标记标记的标题。
PS:我很擅长使用这个Bootstrap项目提出的模式,值得一看!!