İçeriğe geç

Kategori: PHP

Laravel ile bir sayfada birden fazla Pagination link kullanımı

Laravel ile yaptığım bir projede bir view blade dosyasında birden fazla bağımsız sayfalandırma kullanmam gerekti. Burada blade dosyasında linkleri yazdırırken sadece {{ $model->links() }} kullanımında sayfa değişimlerinde tüm sayfalandırma alanları birlikte değişiyor. Çünkü tüm sayfalandırma linklerinde ?page=[sayfa_numarası] geçiyor. Bunun çözümü için paginate fonksiyonunda parametre var. Laravel API dokümantasyonunda paginate methodunda bunu görebiliriz.

Her data setinde paginate fonksiyonuna 3. parametre olarak sayfa numarası değişken ismini veriyoruz.

public function index() {
   $broadcasted = Ad::whereDate('expiry_at', '>=', Carbon::now())
                    ->paginate(10, ['*'], 'broadcasted');

   $oldAds      = Ad::whereDate('expiry_at', '<', Carbon::now())
                    ->paginate(10, ['*'], 'oldAds');

   return view('ad.list', compact('broadcasted', 'oldAds'));
}

Yukarıdaki şekilde sayfa linklerine tıkladığımızda istediğimiz data setinin sayfası değişecektir. Fakat sayfa değiştiği için diğer data setinde 1. sayfaya gözükecektir. Bunun çözümü için blade sayfamızda sayfalandırma linklerini aşağıdaki gibi yazmamız gerekir.

<!-- $broadcasted data seti sayfalandırma link -->
<div class="col-md-12">
    {{ $broadcasted->appends(['oldAds' => $oldAds->currentPage()])->links() }}
</div>

<!-- $oldAds data seti sayfalandırma link -->
<div class="col-md-12">
    {{ $oldAds->appends(['broadcasted' => $broadcasted->currentPage()])->links() }}
</div>

Özellikle sekmeli sayfalarda bu kullanım sayfalandırma işlemini kolaylaştıracaktır.

Yorum Bırak

The Singleton Pattern

Neredeyse her nesneye dayalı(OOP) programda genellikle bir veya birden fazla kaynak bir kere oluşturulur ve tüm uygulamanın sürekliliği için paylaştırılır. Bu tasarımda amaç, hiçbir kopyası olmayan bir kaynağı oluşturmak ve bu kaynağa uygulamanın herhangi bir parçasında erişebilmektir.

Bu tasarıma en iyi örnek veritabanı bağlantısıdır. Her veritabanı işlemi için bir kaynağı oluşturmak çok verimsiz bir işlemdir. Bunu yerine kaynak uygulamanın başlangıcında oluşturulur, tüm işlemler bu kaynak kullanılarak gerçekleştirilir ve uygulamanın sonunda yok edilir. Veritabanı bağlantısı gibi açılan dosya, kuyruk(queue) veya yığın(stack) işlemleri bu tasarıma örnek olarak verilebilir.

Peki biz belirli bir sınıfın örneğinin(instance) tek ve kolayca erişilebilir olduğundan nasıl emin olacağız? Bu problem evrensel(global) bir değişken kullanılarak çözülebilir fakat bu sefer bu değişken uygulamanın herhangi bir bölümünde değiştirilebilir ve bu istenmeyen bir durumdur.(http://c2.com/cgi/wiki?GlobalVariablesAreBad) Belirli bir sınıfın her seferinde tek bir örneğine erişmek istiyorsak Singleton tasarım kullanmamız gerekir. Bu tasarımda sınıfımızın tek bir örneğine erişmek için sabit bir getInstance yöntemi(method) kullanırız.

Yorum Bırak

Warning: include() [function.include]: URL file-access is disabled in the server configuration

Eğer PHP’de

<?php
include('http://www.deneme.com/conf.php');
?>

gibi bir işlem yaptığınız zaman başlıktaki hatayı alırsınız. PHP5’de varsayılan olarak include fonksiyonunda uzak dosyalarını, URL adreslerini kullanamazsınız.

Bunu çözmek için php.ini dosyasında allow_url_open değerini on yapmalısınız. Tabii ki buna izin vermeniz güvenlik açığına neden olacaktır. Alternatif olarak şunları kullanabilirsiniz;

<?php
include(./conf.php); // kodun çalıştığı dizinde conf.php dosyasını arar.
?>[/php]
[php]
<?php
include(../conf.php); // kodun çalıştığı dizinini üstündeki dizinde conf.php dosyasını arar.
?>
<?php
$dosya = file_get_contents('http://www.deneme.com/conf.php'); //conf.php dosyasının içeriğini değişkene aktarır.

echo $dosya; //dosyanın içeriğini yazdırıyoruz.
?>
<?php
include $_SERVER['DOCUMENT_ROOT'] . '/conf.php'; //En iyi çözüm...
?>
Yorum Bırak