查询外部文件(如数据库)


Query an external file like a database

我有一个动态菜单生成php/mysql像这样

<ul>
  <li>Category 1
    <ul>
      <li>Genre 1</li>
      <li>Genre 2</li>
    </ul>
  </li>
  <li>Category 2
    <ul>
       <li>Genre 1</li>
       <li>Genre 2</li>
    </ul>
 </li>
  <li>Category 3
    <ul>
       <li>Genre 1</li>
       <li>Genre 2</li>
    </ul>
 </li>
</ul>

为了节省服务器请求,有一个cron作业设置,每天一次将其打印到外部html文件中(整个站点都使用)。

有没有在这个多级ul上运行一个类似mysql的搜索并返回结果?例如,

select 'li' WHERE genre LIKE "$search" 

返回类别和类型。

感谢大家的时间和帮助。

我首先要说的是,所有鼓励你不要这么做的评论都是正确的。您应该在数据库中执行此操作。说真的,不要这样做!

…如果我假装没有涉及到数据库,我们只是试图解决解析HTML结构有点像数据库,根据您的要求,我会尝试使用jQuery。我将创建一个如下的函数:

function list_search(query) {
    var results = $("li:contains("+query+")")
   if (results.parents('li').length > 0) {
      return results.parents('li');
    }else{
      return $("li:contains("+query+")");
    }

这是特别针对你的列表结构进行微调的——如果你的列表深度超过三级,你就必须重新访问它。如果您对"Category 3"进行查询,它将返回带有子列表的<li>元素。如果你对"Genre 2"进行查询,你将得到每个类别的<li>元素,因为在你的例子中每个类别都包含一个"Genre 2"项目,我认为这就是你正在寻找的行为。

显然,这是一个客户端解决方案,如果您试图在服务器上使用cron-job和诸如此类的东西来完成此操作,则可能没有帮助。看起来您正在使用基于标记的PHP。这里有一个很方便的基于jQuery的phpQuery库我们可以很容易地将其转换到

    $document = phpQuery::newDocumentFile('badidea.html');
    function list_query($query) {  
      $result = pq('li:contains('.$query.')');
      if (strlen($result->parents("li")) > 0) {
        return $result->parents("li");
      }else{
        return $result;
      }  
    }
phpQuery的Github版本似乎比Google Code版本早了2年。->parents()方法似乎不在谷歌代码网站上的示例中,所以我不确定它是否受支持,但它适用于Github版本。

所以…我希望您能从数据库中找到解决这个问题的方法,并且这个示例满足您的好奇心。