Sürekli bir sorgu dizeleri PHP değişen Passing

4 Cevap php

Ben sayfamda makalelerin bir listesi var, ve ben URL'ye $ _GET değerler ekleyerek kendisine türlü ve filtrelerin sayısız uygulamak mümkün olmak istiyorum:

http://www.example.com/blogs.php?sort=newest&popularity=high&length=200

Ben url bu değerleri eklemek benim sayfadaki bağlantıları varsa ... onlar uygulanan herhangi bir önceki sıralar / filtreleri hesaba kadar akıllı olması gerekir.

Örnek 1:

if i currently have... http://www.example.com/blogs.php?sort=newest

ve sonra ben popülerlik ek bir filtre takmak istiyorum = yüksek, ben bu olması gerekir:

http://www.example.com/blogs.php?sort=newest&popularity=high

değil bu:

http://www.example.com/blogs.php?popularity=high

Örnek 2:

if i have... http://www.example.com/blogs.php?popularity=high

ve benim popülerlik filtreyi değiştirmeye çalışın, ben istemiyorum:

http://www.example.com/blogs.php?popularity=high&popularity=low

bu yüzden sadece sorgu dizesi teyel uçmayacak.

Bu nedenle, eski filtreler "hatırlamak" ki benim filtre bağlantıları oluşturmak için ölçeklenebilir bir yolu nedir, ancak gerektiğinde yine kendi filtre değeri üzerine olacak?

4 Cevap

Sen bir ilişkisel dizi içinde filtreleri saklayabilirsiniz:

$myFilters = array(
                      "popularity" => "low",
                      "sort" => "newest"
);

Bir ilişkisel dizi içinde saklanan filtreleri olması, bunlardan sadece biri için 1 değer sağlar. Sonra http_build_query sizin sorgu dizesi oluşturmak için kullanabilirsiniz:

$myURL = 'http://www.example.com/test.php?' . http_build_query($myFilters);

Bu aşağıdaki URL neden olur:

http://www.example.com/test.php?popularity=low&sort=newest

Edit: filtreler QueryString konularda sipariş Oh, ve, size URL'leri bina önce ilişkisel dizi sıralayabilirsiniz:

asort($myFilters);
$myURL = 'http://www.example.com/test.php?' . http_build_query($myFilters);

array_merge or the union operation yenileri ile geçerli GET değişkenleri birleştirmek için kullanın:

$_GET = array('sort'=>'newest');

$params = array_merge($_GET, array('popularity'=>'high'));
// OR
$params = array('popularity'=>'high') + $_GET;

Bundan sonra http_build_query veya kendi sorgu bina algoritma kullanabilirsiniz.

Bunu yapmanın en iyi yolu, elle sorgu dizesi derlemek için. Örneğin:

$str = '?';
$str .= (array_key_exists('popularity', $_GET)) ? 'popularity='.$_GET['popularity'].'&' : '';
$str .= (array_key_exists('sort', $_GET)) ? 'sort='.$_GET['sort'].'&' : '';
// Your query string that you can tack on is now in the "str" variable.

Eğer böyle bir şey görünen bir imza ile kendi işlevini wirte gerektiği gibi görünüyor:

fonksiyonu writeLink ($ baseURL, $ currentFilters, $ additionalFilters)

Ek filtreler http_build_query geçersiz veya çıkış seferde kullanarak tüm URL sonra olabilir, $ currentFilters girdileri kaldırmak gerekir, bu fonksiyon belirleyebilirsiniz