Giriş yapmadınız.

Duyuru

TÜRKÇE KİTAP DUYURUSU:
Laravel 5 : Laravel 5.1 Güzelliği (Türkçe)
Vue.js 2 : Vue.js 2 Majesteleri (Türkçe)

#1 15.10.2014 01:59:21

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

[Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

Arkadaşlar herkese merhab

Ben projemde pagination kullanıyorum herkesin olduğu gibi ancak şöyle bir sorunum var

Mesela linklere tıklanarak yapılan sorgulardan dönen sayfalamlarda ikinci üçüncü ve diğer sayfalrım normal olarak aynı sayfa sayısında dönüyor

Ancak form dan gelen search isteği ile sayfalama yaptığımda ilk sayfada iken sayfa sayım örneğin 23 ise sayfa 2 ye tıkladığımda o kelimeye ait sonuçların 2. sayfası döneceğine veri tabanınındaki tüm kayıtları dönderip 2800 gibi sayfa sayısı ile karşılaşıyorum

Formum yaklaşık şu şekilde

{{Form::open(array('url'=>'product/search','method'=>'get'))}}
{{Form::text("keyword",null,array("tabindex"=>"1","class"=>"search_bg","placeholder"=>"Arama")) }}
{{Form::submit("Search",array("class="search-btn"))}}

Controller sorgum şöyle

public function getSearch() {
 $products =Merchantsproduct::where('prod_name', 'LIKE', '%' . $keyword . '%')
->where('m_active', '=', 1)->where('cat_id', '>=', 1)->where('contur', '>=', 1)
->groupBy('prod_name')
->orderBy('prod_price', 'ASC') ->paginate(20);

return View::make('frontend.home.product.search')->with('products',$products)->with('keyword', $keyword);
}

Dediğim gibi ilk sayfada sorun yok tüm kriterlere uygun olarak dönüşler doğru oluyor ancak başka bir sayfaya gitmek istediğimde pagination tüm tabloyu getiriyor

Foruma ve google'a baktım ancak benzer bir şey bulamadım 4-5 günden beri bu sorun çok yordu

Yardımlarınız için imdiden teşekkür ederim smile

Selam ve dua ile

Son düzenleyen betho (15.10.2014 20:59:58)

Çevrimdışı

#2 15.10.2014 08:22:31

evrend
Üye
Yer: DÜZCE
Kayıtlı: 26.05.2014
Mesajlar: 369
Website

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

Aşağıdaki gibi  "Input::old" methodu ile o değerleri alıp, linkleri oluştururken yeni sonuca append ile eklemelisiniz.

{{$yazilar->appends(array('string' => Input::old('string')))->links()}}

Son düzenleyen evrend (15.10.2014 08:28:07)


Unutmayın, HERKOD aynı değildir.
Fiyat/Performans Cloud için: Digital Ocean.
Ayda 2,5$'a 512Mb ram, 1Core CPU Cloud için: Vultr.

Çevrimdışı

#3 15.10.2014 13:45:18

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

evrend yazdı:

Aşağıdaki gibi  "Input::old" methodu ile o değerleri alıp, linkleri oluştururken yeni sonuca append ile eklemelisiniz.

{{$yazilar->appends(array('string' => Input::old('string')))->links()}}

Teşekkürler ancak maalesef sonuç aynı sad

Çevrimdışı

#4 15.10.2014 14:04:33

evrend
Üye
Yer: DÜZCE
Kayıtlı: 26.05.2014
Mesajlar: 369
Website

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

betho yazdı:
evrend yazdı:

Aşağıdaki gibi  "Input::old" methodu ile o değerleri alıp, linkleri oluştururken yeni sonuca append ile eklemelisiniz.

{{$yazilar->appends(array('string' => Input::old('string')))->links()}}

Teşekkürler ancak maalesef sonuç aynı sad

Verdiğim örnekteki string yerine sizin uygulamanız için "keyword" kullanmalısınız. Bu şekilde yaptığınızda olmalı.
Yani şu şekilde;

{{$sizin_dataniz->appends(array('keyword' => Input::old('keyword')))->links()}}

Son düzenleyen evrend (15.10.2014 14:06:09)


Unutmayın, HERKOD aynı değildir.
Fiyat/Performans Cloud için: Digital Ocean.
Ayda 2,5$'a 512Mb ram, 1Core CPU Cloud için: Vultr.

Çevrimdışı

#5 15.10.2014 14:45:47

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

@evrend kardeşim ben de tam öyle yaptım ancak olmadı normalde Input:old ile o değerin paginate geri dönmesi gerekiyor ama olmuyor  bir tuhaflık var bu işte sad

Çevrimdışı

#6 15.10.2014 14:54:20

evrend
Üye
Yer: DÜZCE
Kayıtlı: 26.05.2014
Mesajlar: 369
Website

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

betho yazdı:

@evrend kardeşim ben de tam öyle yaptım ancak olmadı normalde Input:old ile o değerin paginate geri dönmesi gerekiyor ama olmuyor  bir tuhaflık var bu işte sad

Input::old('keyword') değeri hiç gelmiyorsa başka bir problem olmalı. Sayfada yönlendirme varsa o yüzden oluyor olabilir. old değeri sessionda flash mantığı ile tutuluyor diye hatırlıyorum. Yani tek kullanımlık. Arada bi yönlendirme işlemi varsa old değeri orada siliniyor olabilir. Bunun dışında bende yukarıdaki şekilde çalışıyor. Başka fikrim yok sad
Kolay gelsin.


Unutmayın, HERKOD aynı değildir.
Fiyat/Performans Cloud için: Digital Ocean.
Ayda 2,5$'a 512Mb ram, 1Core CPU Cloud için: Vultr.

Çevrimdışı

#7 15.10.2014 15:48:09

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

evrend yazdı:
betho yazdı:

@evrend kardeşim ben de tam öyle yaptım ancak olmadı normalde Input:old ile o değerin paginate geri dönmesi gerekiyor ama olmuyor  bir tuhaflık var bu işte sad

Input::old('keyword') değeri hiç gelmiyorsa başka bir problem olmalı. Sayfada yönlendirme varsa o yüzden oluyor olabilir. old değeri sessionda flash mantığı ile tutuluyor diye hatırlıyorum. Yani tek kullanımlık. Arada bi yönlendirme işlemi varsa old değeri orada siliniyor olabilir. Bunun dışında bende yukarıdaki şekilde çalışıyor. Başka fikrim yok sad
Kolay gelsin.

İlgin için teşşekkür ediyorum sağolasın ben çözümü bulursam yada senin dediğin gibi bir nedeni varsa buradan paylaşırım ,Tekrar teşekkür ederim @evrend smile

Çevrimdışı

#8 15.10.2014 19:11:02

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

@betho, sorularda eksik bilgi vermemenizi rica ederim. Controller metodunuzda $keyword'ün nereden geldiğini anlayamıyoruz.
Input::old metodu sessiona saklanmış verileri getirir. Ancak ne Input::flash ne de View'e gönderirken withInput gibi bir metod kullanılmamıştır. O yüzden Input::old boş döndürecektir.

Sorunuzun çözümü şu olabilir:

$products->appends(Input::only('keyword'))->links();

Çevrimdışı

#9 15.10.2014 20:57:45

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

sergin yazdı:

@betho, sorularda eksik bilgi vermemenizi rica ederim. Controller metodunuzda $keyword'ün nereden geldiğini anlayamıyoruz.
Input::old metodu sessiona saklanmış verileri getirir. Ancak ne Input::flash ne de View'e gönderirken withInput gibi bir metod kullanılmamıştır. O yüzden Input::old boş döndürecektir.

Sorunuzun çözümü şu olabilir:

$products->appends(Input::only('keyword'))->links();

@sergin öncelikle yanıt için çok teşekkür ederim sorunum çözüldü öte yandan soruyu sorarken

{{Form::text("keyword",null,array("tabindex"=>"1","class"=>"search_bg","placeholder"=>"Arama")) }}

inputumun adı  'keyword' y7ani keyword inputtan controller a gidiyor oradanda yine dikkat ederseniz

return View::make('frontend.home.product.search')->with('products',$products)->with('keyword', $keyword);

return  View::make metodu içinde tekrar search forma gidiyor

Ben bunların yeterli olacağını sanıyorum $keyword değişkeninin neren gelip nereye gittiğinin nlaşılmasında ancak sanırım hepimizde kodlarla sürekli olarak uğraşmaktan bazen detayları kaçırıyoruz smile

Yine de çok sağolun old yerine only kelimesi bizi kurtardı bu durumdan çok hoş bir durum bir o kadarda gizemli

Selam ve dua ile

Çevrimdışı

#10 15.10.2014 21:39:46

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

Eksik bilgi derken ben şurayı kast ettim:

public function getSearch() {
 $products =Merchantsproduct::where('prod_name', 'LIKE', '%' . $keyword . '%')

Burada $keyword değişkenine atanmış bir şey göremiyorum. Öncesinde $keyword = Request::get('keyword'); veya $keyword = Input::get('keyword'); gibi bir satır olması gerekmez mi?

Sorunuzla ilgili ek bir bilgi vermeliyim. Sayfalandırılmış url'ler zaten "&keyword=xyz" diye bir şey içereceğinden inputun bir parçasıdır ve view'lerde de (tıpkı linkleri gösterirken kullandığımız gibi) kullanılabilir durumdadır. View'e ayrıca bir $keyword değişkeni geçmeyebilirsiniz.

Çevrimdışı

#11 15.10.2014 22:20:14

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

sergin yazdı:

Eksik bilgi derken ben şurayı kast ettim:

public function getSearch() {
 $products =Merchantsproduct::where('prod_name', 'LIKE', '%' . $keyword . '%')

Burada $keyword değişkenine atanmış bir şey göremiyorum. Öncesinde $keyword = Request::get('keyword'); veya $keyword = Input::get('keyword'); gibi bir satır olması gerekmez mi?

Sorunuzla ilgili ek bir bilgi vermeliyim. Sayfalandırılmış url'ler zaten "&keyword=xyz" diye bir şey içereceğinden inputun bir parçasıdır ve view'lerde de (tıpkı linkleri gösterirken kullandığımız gibi) kullanılabilir durumdadır. View'e ayrıca bir $keyword değişkeni geçmeyebilirsiniz.

Çok teşşekkür ederim kardeşim ilk olarak sorduğun şey getSearch metodunda var dı ancak ben sizlere o ayrıntıyı vermeyi unutmuşum  $keyword = Input::get('keyword'); bu şekilde geliyor o değişken

Şimdi bir şey sormak istiyorum paginate() sınıfının,isQuickPaginating,getCurrentPage,getLastPage,getFrom,getTo,getPerPage,getCollection,getItems,setItems,getTotal,getFactorygetIterator gibi bir takım methodları var ben her sayfada dönen ürünün en yüksek fiyatlı olanını bulmak istiyorum , o nedenlede bu methodlara baş vurmam gerektiğini düşünüyorum ancak ben bu methodlarda dönen bilgileri alamıyorum en fazla aray içinde bu methodları döndürebiliyorum bu konuda bir fikir verebilirmisin

Yani kısaca 10 sayfalık bir sorgu döndü her sayfada yirmi tane ürün var ve ben o sayfadaki  en pahalı ürünün fiyatını aktif sayfaya değişken olarak geçmek istiyorum şeklinde sorayım
Eğer bu konuda bu topic altından yanıt alırsam yeni konu açmaya gerek de kalmayacak böylece
Şimdiden teşekkürler

Son düzenleyen betho (15.10.2014 22:26:51)

Çevrimdışı

#12 15.10.2014 22:57:42

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

Fiyat alanına göre ASC sıralama yaptığınıza göre, sayfadaki son ürünün fiyatı en yüksek olmalıdır. $products üzerinden getCollection() metodu ise bir koleksiyonu döndüreceği için koleksiyonun son elemanının fiyatına view'de "$products->getCollection()->last()->prod_price" olarak erişebilirsiniz. Ayrıca şayet sorgunuz sıralamalı olmasa dahi "$products->getCollection()->max('prod_price')" şeklinde de en yüksek fiyatı bulabilirsiniz.

Not: sorgunuzda group by kullanılmış. Dokümantasyondaki şu bilgiyi hatırlayınız:

Not: Şu an için, bir groupBy cümlesi kullanan pagination işlemleri Laravel tarafından verimli bir biçimde çalıştırılamamaktadır. Eğer sayfalanmış bir sonuç kümesinde bir groupBy kullanmanız gerekiyorsa, veritabanını elle sorgulamanız ve Paginator::make kullanmanız önerilir. (http://laravel.gen.tr/docs/pagination)

Öte yandan, bir gruplama fonksiyonu (sayı, toplam, ortalama, min, max vb gibi) kullanmadığınıza göre groupby kullanmanızın bir anlamı da yok.

Son düzenleyen sergin (15.10.2014 23:21:13)

Çevrimdışı

#13 15.10.2014 23:19:22

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

sergin yazdı:

Fiyat alanına göre ASC sıralama yaptığınıza göre, sayfadaki son ürünün fiyatı en yüksek olmalıdır. $products ise bir Eloquent koleksiyonu olduğu için koleksiyonun son elemanının fiyatına view'de "$products->last()->prod_price" olarak erişebilirsiniz. Ayrıca şayet sorgunuz sıralamalı olmasa dahi "$products->max('prod_price')" şeklinde de en yüksek fiyatı bulabilirsiniz.

Not: sorgunuzda group by kullanılmış. Dokümantasyondaki şu bilgiyi hatırlayınız:

Not: Şu an için, bir groupBy cümlesi kullanan pagination işlemleri Laravel tarafından verimli bir biçimde çalıştırılamamaktadır. Eğer sayfalanmış bir sonuç kümesinde bir groupBy kullanmanız gerekiyorsa, veritabanını elle sorgulamanız ve Paginator::make kullanmanız önerilir. (http://laravel.gen.tr/docs/pagination)

Öte yandan, bir gruplama fonksiyonu (sayı, toplam, ortalama, min, max vb gibi) kullanmadığınıza göre groupby kullanmanızın bir anlamı da yok.

Tüm yardımlar için teşekkür ederim kardeşim haklısın groupBy gereksiz olmuş bir önceki sorguda count(*) vardı onla beraber kullanmıştım kopyalayıp alınca beraber gelmiş önceki sorguyla

Selam ve dua ile

Çevrimdışı

#14 15.10.2014 23:33:30

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

@sergin kardeşim
"$products->last()->prod_price" olarak erişebilirsiniz. Ayrıca şayet sorgunuz sıralamalı olmasa dahi "$products->max('prod_price')" şeklinde de en yüksek değeri olanı alabilmemiz gerekiyor ancak ben de bunlardan sadece last olanı çalıştı o da bana sayfadaki en son ürünün fiyatını verdi ancak max olanı kullanamadım bile bana
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Support\Collection' does not have a method 'max' (View:  ............ bu şekilde bir hata dönderdi

Oysa ben bu fonksiyonla sayfaya gelen ürünlerden en yükseğini ala bilmeydim değilmi

Çevrimdışı

#15 15.10.2014 23:40:41

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

Ben bir düzeltme yapmıştım mesajımda. Paginate olduğunu bir an hatırdan çıkarmışım. Önce getCollection çağırmak gerekli olabilir diye. Last metodu Illuminate\Support\Collection'un bir metodudur. max ise Eloquent/collectionun bir metodudur. getCollection bir Illuminate\Support\Collection döndürür. Bu nedenle çalışmıyor olabilir max.

Çevrimdışı

#16 15.10.2014 23:58:44

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

sergin yazdı:

Ben bir düzeltme yapmıştım mesajımda. Paginate olduğunu bir an hatırdan çıkarmışım. Önce getCollection çağırmak gerekli olabilir diye. Last metodu Illuminate\Support\Collection'un bir metodudur. max ise Eloquent/collectionun bir metodudur. getCollection bir Illuminate\Support\Collection döndürür. Bu nedenle çalışmıyor olabilir max.

İlk olarak getCollection çağırdığımda da jqueryi  durduruyor sorgunun döndüğü view de bir tane range slider var  onun max: ve value: değerleri içinde çağırınca yani oysa getCollection çağırayınca değerler dönüyordu ve slider çalışıyordu böyle çağırınca slider kitlendi smile
Peki bunu nasıl çözebilirim ben smile

Son düzenleyen betho (16.10.2014 00:05:57)

Çevrimdışı

#17 16.10.2014 00:13:35

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

Controller metodunda return View....'den önceki satıra

$maxfiyat = $products->getCollection()->reduce(function($result, $item)
		{
			return (is_null($result) || $item->prod_price > $result) ? $item->prod_price : $result;
		});

ekleyip, sonra bu maxfiyat'ı view'e geçebilirsiniz sanıyorum. max metodunun tanımı yaklaşık böyle.

Çevrimdışı

#18 16.10.2014 00:31:34

betho
Üye
Kayıtlı: 15.05.2014
Mesajlar: 71

Yanıt: [Çözüldü] Pagination İkinci sayfda sorun yaşıyorum ?

sergin yazdı:

Controller metodunda return View....'den önceki satıra

$maxfiyat = $products->getCollection()->reduce(function($result, $item)
		{
			return (is_null($result) || $item->prod_price > $result) ? $item->prod_price : $result;
		});

ekleyip, sonra bu maxfiyat'ı view'e geçebilirsiniz sanıyorum. max metodunun tanımı yaklaşık böyle.

Yardımların için çok teşekkür ederim ancak ben sorunu çözdüm bu konuda sıkıntı çekenlere de kaynak olması açısından paylaşayım buradan

$arrayPaginate = $products->sortByDesc('prod_price')->take(1);
                foreach ($arrayPaginate as $sort) {
                    echo $sort->prod_price;
                }

Illuminate\Support\Collection sınıfının bir üyesi olan sortByDesc ile 'prod_price alanını dönüyoruz take(1) ile en üsttekini alıyoruz'
veb unu ekrana basıyoruz hepsi bu kadarmış öte yandan tam tersini isteyenler yani en ucuz ürünü isteynler ise yine Illuminate\Support\Collection nin  sortBy methodunu kullanabilirler çünkü bu fonksiyonda descending otomatik olarak false edilmiş yada sortBy kullanarak descending parametresini tru olarak geçebilirler herkesin keyfine kalmış yani

Çok çok teşekkürler kardeşim

Selam ve dua ile

Çevrimdışı

Forum alt kısmı