使用PHP和MySQL的Bootstrap下拉菜单

时间:2018-02-12 20:10:41

标签: php mysql twitter-bootstrap laravel

我是PHP的新手。使用Laravel这很简单:

    @isset($tags)
         @foreach($tags as $tag)
             <li class="dropdown">
                 <a href="#" class="dropdown-toggle" data-toggle="dropdown"  role="button" aria-expanded="false" aria-haspopup="true">
                    {{ $tag->name }}
                </a>
                <ul class="dropdown-menu">
                    @foreach($tag->categories as $category)
                        <li><a href="{{-- route('register') --}}" {{$category->name }}</a></li>
                        <li class="divider"></li>
                    @endforeach
                 </ul>
             </li>  
        @endforeach
    @endisset

我需要使用普通的PHP,因为Laravel似乎速度很慢而且我做了这个

<?php if(isset($tags)): ?>
    <?php foreach($tags as $tag): ?>
            <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
        <?php echo $tag['name'] ?>
    </a>
        </li>   
    <?php endforeach ?>
   

现在我被卡住了。

$tags显示效果不错,但我似乎没有$tag->categories下拉列表。

我的查询如下:

SELECT t.id, t.name as tag_name, c.id, c.name as c_name from tags t INNER JOIN category_tag ct ON (t.id = ct.tag_id)'.
                    'INNER JOIN categories c ON (ct.category_id = c.id) ORDER BY t.id

任何帮助都会很好。

2 个答案:

答案 0 :(得分:1)

试试这个:

<?php 
if(isset($tags)){
     foreach($tags as $tag){ ?>
         <li class="dropdown">
             <a href="#" class="dropdown-toggle" data-toggle="dropdown"  role="button" aria-expanded="false" aria-haspopup="true">
                <?php echo $tag->name; ?> 
            </a>
            <ul class="dropdown-menu">
                <?php
                foreach($tag->categories as $category){ ?>
                    <li><a href="{{route('register')}}" <?php echo $category->name; ?> </a></li>
                    <li class="divider"></li>
                <?php } ?>
             </ul>
         </li>  
     <?php }
} 
?>

虽然,我建议使用laravel语法。它不会使你的页面变慢,因为它们只是被转换为类似上面例子的帮助者。

答案 1 :(得分:0)

没有下拉似乎正常,因为您的PHP脚本中没有<ul class="dropdown-menu">,就像您的laravel刀片中提到的那样:

<ul class="dropdown-menu">
     @foreach($tag->categories as $category)
         <li><a href="{{-- route('register') --}}" {{$category->name }}</a></li>
         <li class="divider"></li>
     @endforeach
</ul>

然而,如你所说, laravel很简单雄辩的模型关系的原因。

当然,你可以用很多不同的方式在 vanilla php 中做到这一点。

我想到了这两种方法......

  1. 在第二个查询中获取类别,并将它们与foreach中的 $标记对齐
  2. 重建您的查询并添加子查询,添加连接列,可以通过php解析。
  3. 请注意,第一个使用更多php处理,而第二个使用更多负载数据库

    让我们专注于第二个,使用混合数据库处理和php ...

    因此,请将您的查询修改为:

    SELECT t.id, t.name as tag_name,
    (SELECT group_concat(
    (SELECT concat_ws(':',c.id,c.name) FROM categories c WHERE ct.category_id = c.id)
    ) FROM category_tag ct WHERE ct.tag_id = t.id) as categories_ctn
    from tags t ORDER BY t.id
    

    现在,您将有一个categories_ctn列,其中,category_id:category_name

    分隔的连接数据

    所以最后要做的是将数据分解为数组并修改视图脚本。请注意这个php脚本中的评论...

    <?php if(isset($tags)): ?>
    <?php foreach($tags as $tag) { ?>
            <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
                         <?php echo $tag['tag_name'] ?>
                    </a>
                    <ul class="dropdown-menu">
                    <?php 
                         $categories = explode(',',$tag['categories_ctn']);
                         foreach($categories as $category_data) {
                             $category = explode(':',$category_data);
                    ?>
    
                        <li><a href="#<?php echo $category[0]; // here you get category id ?>" <?php echo $category[1]; // here you get category name ?></a></li>
                        <li class="divider"></li>
                    <?php } ?>
                   </ul>
           </li>   
    <?php } ?>
    

    我希望你现在掌握了从mysql查询中可以获得的内容,以及你可以用php中的数据做些什么。

    我没有测试过代码,但它应该可以立即使用。

    周到的想法,你是否使用 Laravel

    上面提到的 Laravel 的原因是没有意义的,你可以通过模型关系实现相同的结果,比如你提到的刀片......

    上面提到的代码是可移植的,这意味着您可以在任何 php 项目中使用它,我相信这就是您的问题......

    第二个想法......

    请记住,在mysql中加入类别会为您带来一个类别而不是全部...

    此示例是关于在菜单中显示所有类别的标记...

    最后不要避免 Laravel ,因为它是美丽独一无二......:)