Profil detayı eklendi, herkes profillerine girip bir gözatsın! Sevdiğiniz üyelerin cevaplarını takip edin! Tüm güncellemeler

Php shortcode yapımı hakkında bir soru

Merhaba,


Wordpress' de shortcode hazırlayıp editor içinde kullanıyoruz. Bunu php projelerimizde nasıl yapabiliriz?


örneğin; [gallery="1.jpg,2.jpg,3.jpg" type="slider"] bunu editorde yazıp db ye normal site yazıların içinde kaydettiğimizi varsayalım. db' den query ile çağırdığımızda bunu kodu tanıyıp foreach ile slider seklinde göstermek istiyorum. Aramızda bunu bilen var mı?


Yardımlarınız için teşekkürler.

php
2

Cevaplar (2)

İşlem devam ediyor, lütfen bekleyin..
Emre BÜYÜKDURMUŞ
Doğru Cevap
@ebykdrms
1 ay önce

Veriyi PHP ile parçalayarak işleminizi yapabilirsiniz.


Diyelim ki üzerinde çalışacağımız verimiz bu:

$data= '[gallery="1.jpg,2.jpg,3.jpg" type="slider"]';


Bu tip bir veriden bazı parametreler okumak istiyoruz.

function getParameterValue($data, $parameter)
{
    // parametre adından sonra = ve " işaretleri olacak.
    $parameter = $parameter.'="';

    // arayacağım parametrenin $data içinde nerede olduğunu buluyorum.
    $parameterStartingPos = strpos($data, $parameter);

    // eğer böyle bir parametre yoksa false döndürelim.
    if($parameterStartingPos===false) return false;

    // arayacağım parametrenin kaç karakterden oluştuğunu buluyorum.
    $parameterLength = strlen($parameter);

    // parametrenin değerleri, bu ifadeden sonra başlıyor. Başlangıç pozisyonu.
    $startingCharPos = $parameterStartingPos+$parameterLength;
    
    // şimdi data içinde örn gallery=" ifadesinden sonraki ilk " karakterini arıyorum.
    $endingCharPos = strpos($data, '"', $startingCharPos);

    // böylece 2 tırnak işaretinin nerede başlayıp nerede bittiğini buldum.
    // bu başlangıç ve bitiş pozisyonları arasındaki alan, benim istediğim değerdir.
    // benim istediğim değerin kaç karakterden oluştuğunu buluyorum.
    $valueLength = $endingCharPos - startingCharPos;

    // Şimdi değerlerin başlangıcından değerin uzunluğu kadar alanı string içinden alıyorum.
    $value = substr($data, $startingCharPos, $valueLength);

    // Bulduğum değeri döndürüyorum.
    return $value;
}


Bu fonksiyonu kullanarak verim içinde type adında parametreler var mı diye bakıyorum. type parametremiz zorunlu. Çünkü bu parametreye bakarak ne işlem yapacağımızı bileceğiz. Bu yüzden de eğer type parametresi string'imiz içinde yoksa hata verip programı sonlandırıyorum.

$type = getParameterValue('type');
if($type===false) { echo 'Kodun tipi belirlenemedi...'; exit(); }


Artık type tipine bakarak işlemlerimizi yapabiliriz. Eğer type değeri slider ise slider yapacağız demektir.

$sliderImages = array();
if($type==='slider') 
{
    // bu bir slider ise gallery parametremiz de olmalı. eğer yoksa yine hata vereceğiz.
    $galleryStr = getParameterValue('gallery');
    if($galleryStr === false) { echo 'Slider görselleri kod içinde belirtilmemiş...'; exit(); }

    // bu görselleri virgül karakterlerinden ayırarak elde edeceğim.
    // ama bunu da yazacağım bir fonksiyon yardımıyla yapıyorum.
    // böylece görsellerimin adlarını bir dizi içinde elde edeceğim.
    $sliderImages = getGalleryItems($galleryStr);
}

// dosya adlarını yazdıralım. (type=slider değilse dizimiz boş dönecektir.)
if(empty($sliderImages)) echo "hiç görsel yok...";
foreach($sliderImages as $sliderImage) echo $sliderImage.'<br />';


Son olarak gallery parametresinin değerini virgüllerinden ayırıp dizi haline getiren fonksiyon:

function getParameterValueItems($str)
{
    // eğer değer boşsa boş bir dizi döndürüyorum.
    if(empty(trim($str))) return array();

    // virgül karakterlerinden string'i parçalıyorum ve kaç tane eleman olduğunu buluyorum.
    $values = explode(',', $str);
    $valuesCount = count($values);
    
    // her bir elemanı kontrol ederek başındaki ve sonundaki boşlukları siliyorum.
    for($i=0; $i<$valuesCount; $i++) $values[$i] = trim($values[$i]);

    // sonuç olarak elde ettiğim diziyi döndürüyorum.
    return $values;
}


Bu getParameterValue() ve getParameterValueItems() fonksiyonlarını bir dosya içine alıp bu işleri yapacağınız sayfalara include edebilirsiniz. Hatta bu fonksiyonları daha nesne tabanlı programlama yapısına uygun şekilde class içinde kullanabilirsiniz. Yapınız gün geçtikçe, ihtiyaçlarınıza göre gelişecektir...

Cevapla @dreamys2 hafta önce
@ebykdrms, Çok teşekkürler yardımcılarınız için. Bir süredir girememiştim anca teşekkür edebildim.
İşlem devam ediyor, lütfen bekleyin..
Eren Kurt
@ErenKrt
1 ay önce [Güncellendi]

Php'de preg_match ile /(\[gallery="(.*?)" type="slider"\])/g regexi ile yapabilirsin. Preg_matchden dönen veri resimleri belirtir yani 1.jpg,2.jpg,3.jpg olarak. Ardından bunları $bol= explode(",",$donenveri); olarak bölersin ve sonra foreach döngüsüne sokarsın.

foreach ($bol as $foto) {

echo $foto;

}


Cevapla @dreamys2 hafta önce
@ErenKrt, Çok teşekkürler
İşlem devam ediyor, lütfen bekleyin..

Cevap yaz Sadece sorunun cevabını yazın

Yabancı Dizi Arşivi