Php 通过链接向url添加其他查询
我有一个使用查询字符串检索数据的站点,如下所示:Php 通过链接向url添加其他查询,php,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>&
<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/?category=Creativity&sort=SORT_NAME_ASC
我不知道该怎么加。如果我只是加上这条带子,它会变得一团糟 如果您一直单击
类别
或排序
,则以下代码不会“复制”url中的值。它可以复制/粘贴并运行
// 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>
//检查值的步骤
回声';
打印(美元);;
回声';
回声“
”;
函数foo($type,$value){
$args=$\u GET;
$args[$type]=$value;//防止重复
返回http_build_query($args);//返回新的查询字符串
}
?>
您还可以使用代码删除其中任何一个。将其添加到上一个代码之后(也可复制/粘贴)。看一看:
var menus = [];
function addElement(type, element) {
menus[type] = element;
}
现在,您的下拉元素可以执行一个简单的操作-转到提供的url。如果您想选择一些值,那么您的元素应该存储选定的值,而不是打开的url。例如,您可以使用这个JS代码来实现这一点
<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>
上面的类型是菜单类型的编号索引。例如,0
可以用于排序,1
可以用于类别-这是为了确保您只能从菜单类型中选择一个值。现在您可以用这样的内容替换代码
<input type="button" onclick="openUrl('?')" value="Go to URL">
以及openUrl
函数的JS代码
您可能需要更改函数名xD
var menus = [];
function addElement(type, element) {
menus[type] = element;
}
<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>
<input type="button" onclick="openUrl('?')" value="Go to URL">
function openUrl(prefix) {
var url = prefix + menus.join('&');
document.location.href = url;
}