查询外部文件,如数据库

时间:2014-07-27 17:41:47

标签: php html mysql

我有一个像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" 

返回类别和类型。

感谢大家的时间和帮助。

1 个答案:

答案 0 :(得分:0)

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

但是 ...如果我假装没有涉及数据库,我们只是试图解决HTML结构的问题 like a数据库,根据您的要求,我尝试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+")");
    }

这特别针对您的列表结构进行了微调 - 如果您列出了第三级或更多,您必须重新访问它。如果你查询&#34;类别3&#34;它会将<li>元素与子列表一起返回。如果您查询&#34;流派2&#34;您将获得每个类别的<li>元素,因为您的示例中的每个元素都包含一个&#34;类型2&#34;项目,我认为这是你正在寻找的行为。

显然,这是一个客户端解决方案,如果您尝试使用cron-jobs等等在服务器上执行此操作,这可能无济于事。看起来您正在使用基于标签的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;
      }  
    }

FWIW Github版本的phpQuery似乎比Google Code版本提前了大约2年。 ->parents()方法似乎不在Google代码网站的示例中,因此我不确定它是否受支持,但它适用于Github版本。

所以...我希望你能找到一种方法从数据库中解决这个问题,而这个例子可以满足你的好奇心。