通过链接向URL添加其他查询

时间:2016-07-21 20:28:10

标签: php

我有一个使用查询字符串来检索数据的网站:

<div id="menu-sort-dropdown" class="search-filter-item">
    <p><?php echo $query_sort_title; ?></p>
    <ul class="dropdown-menu">
        <li><a href="/teachings/">Newest</a></li>
        <li><a href="?sort=SORT_DATE_LIT_ASC">Oldest</a></li>
        <li><a href="?sort=SORT_NAME_ASC">Alphabetically</a></li>
    </ul>
</div>

<div id="menu-category-dropdown" class="search-filter-item">
    <p><?php echo $query_category_title; ?></p>
    <ul class="dropdown-menu">
        <li><a href="/teachings/">All</a></li>
        <li><a href="?category=Coaching">Coaching</a></li>
        <li><a href="?category=Conversation">Conversation</a></li>
        <li><a href="?category=Craft">Craft</a></li>
        <li><a href="?category=Creativity">Creativity</a></li>
    </ul>
</div>

获取数据非常有用:

teachings/?sort=SORT_NAME_ASC

teachings/?category=Creativity

但我可以这样做:

teachings/?category=Creativity&sort=SORT_NAME_ASC

我无法理解如何添加它。如果我只是附加条带它将变得一团糟。

2 个答案:

答案 0 :(得分:0)

以下代码没有重复&#39;如果您一直点击categorysort,则会在网址中显示这些值。它被复制/粘贴并运行。

// to check the values
echo '<pre>';
print_r($_GET);
echo '</pre>';

echo '<hr>';

function foo($type, $value){
    $args = $_GET;
    $args[$type] = $value; // prevent duplication
    return http_build_query($args); // returns new query string
}

?>
<a href="?<?php echo foo('sort', 'SORT_DATE_LIT_ASC'); ?>">SORT_DATE_LIT_ASC</a>
<br>

<a href="?<?php echo foo('sort', 'SORT_NAME_ASC'); ?>">SORT_NAME_ASC</a>
<br>


<a href="?<?php echo foo('category', 'Coaching'); ?>">Coaching</a>
<br>
<a href="?<?php echo foo('category', 'Conversation'); ?>">Conversation</a>

您还可以使用代码删除其中的任何内容。在上一个代码之后添加它(也可以复制/粘贴)。看看:

<?php
function bar($type){
    $args = $_GET;
    unset($args[$type]);
    return http_build_query($args); // returns new query string
}
?>

<hr>
<a href="?<?php echo bar('sort'); ?>">Remove SORT</a>
<br>
<a href="?<?php echo bar('category'); ?>">Remove CATEGORY</a>

答案 1 :(得分:0)

至于你现在的下拉元素做一个简单的动作 - 转到提供的URL。如果要选择几个值,则元素应存储选定的值而不是打开的URL。您可以使用例如此JS代码

来执行此操作
var menus = [];
function addElement(type, element) {
    menus[type] = element;
}

上面的类型是菜单类型的数字索引。例如,0可用于排序,1用于类别 - 这是为了确保您只能从菜单类型中选择一个值。现在你可以用这样的代码替换代码

<div id="menu-sort-dropdown" class="search-filter-item">
    <p><?php echo $query_sort_title; ?></p>
    <ul class="dropdown-menu">
        <li><a href="/teachings/">Newest</a></li>
        <li><a href="javascript: addElement(0, 'sort=SORT_DATE_LIT_ASC');">Oldest</a></li>
        <li><a href="javascript: addElement(0, 'sort=SORT_NAME_ASC');">Alphabetically</a></li>
    </ul>
</div>

<div id="menu-category-dropdown" class="search-filter-item">
    <p><?php echo $query_category_title; ?></p>
    <ul class="dropdown-menu">
        <li><a href="/teachings/">All</a></li>
        <li><a href="javascript: addElement(1, 'category=Coaching');">Coaching</a></li>
        <li><a href="javascript: addElement(1, 'category=Conversation');">Conversation</a></li>
        <li><a href="javascript: addElement(1, 'category=Craft');">Craft</a></li>
        <li><a href="javascript: addElement(1, 'category=Creativity');">Creativity</a></li>
    </ul>
</div>

要转到准备好的URL,您需要添加另一个元素,例如按钮(或鼠标单击后调用openUrl函数的其他内容)

<input type="button" onclick="openUrl('?')" value="Go to URL">

openUrl函数的JS代码

function openUrl(prefix) {
    var url = prefix + menus.join('&');
    document.location.href = url;
}