• 21-03-2021, 20:15:57
    #1
    Merhaba, kendi temalarımı oluşturuyorum öğrenme amaçlı. Herşey gayet güzel gidiyordu ancak bir hatayla karşılaştım.

    Warning: Invalid argument supplied for foreach()
    Hatası. Hataya sebep veren yeri biliyorum ancak düzeltemiyorum. CodestarFreamwork üzerinden sosyal medya ekleme bölümü yaptım. Bölüme ekleme yaptığımda hata felan vermemekte. Ancak bölüm boş iken yukarıda ki hatayı vermekte.

    Kullanılan kod:

    <div class="social-icons">
    <?php foreach ($ayarlar["sosyal_medya"] as $sosyal) {?>
    <a href="<?php echo $sosyal["sosyal_link"];?>" target="_blank">
    <i class="<?php echo $sosyal["sosyal_ikon"];?>"></i>
    </a>
    <?php } ?>
    </div>
    Bu kısımda bir ekleme yokken:


    Bu hatayı vermekte:




    Yukarıda ki kısımdan ekleme yaptığımda ise herhangi bir hata vermemekte herşey sorunsuz çalışmakta.
  • Kabul Edilen Cevap
    • SefaK0 adlı üyeden alıntı: mesajı görüntüle
      Evet hocam bunun farkındayım yani hatanın nerde oluğunu biliyorum ancak nasıl düzelteceğimi bilmiyorum. Çünkü panel üzerinden bir sosyal medya eklemesi yaptığımda sorun kalmıyor.
      anladım sadece boş iken alıyorsunuz yani hatayı

      <?php foreach ($ayarlar["sosyal_medya"] as $sosyal) {?>

      satırını
      <?php if(empty($ayarlar['sosyal_medya'])) $ayarlar['sosyal_medya'] = []; foreach ($ayarlar["sosyal_medya"] as $sosyal) {?>

      şeklinde yaparak çözebilirsiniz
  • 21-03-2021, 20:27:17
    #2
    Muhtemelen veriyi json formatında kayıt ediyordur. Jsonı decode edip array formatına dönüştürmen gerekiyor. Aşağıdaki gibi denermisin.
    <div class="social-icons">
    <?php
    $json_decode = json_decode($ayarlar["sosyal_medya"],true);
    ?>
    <?php foreach ($json_decode as $sosyal) {?>
    <a href="<?php echo $sosyal["sosyal_link"];?>" target="_blank">
    <i class="<?php echo $sosyal["sosyal_ikon"];?>"></i>
    </a>
    <?php } ?>
    </div>
  • 21-03-2021, 20:28:59
    #3
    Sanalgezgin57 adlı üyeden alıntı: mesajı görüntüle
    Muhtemelen veriyi json formatında kayıt ediyordur. Jsonı decode edip array formatına dönüştürmen gerekiyor. Aşağıdaki gibi denermisin.
    <div class="social-icons">
    <?php
    $json_decode = json_decode($ayarlar["sosyal_medya"],true);
    ?>
    <?php foreach ($json_decode as $sosyal) {?>
    <a href="<?php echo $sosyal["sosyal_link"];?>" target="_blank">
    <i class="<?php echo $sosyal["sosyal_ikon"];?>"></i>
    </a>
    <?php } ?>
    </div>
    Denedim hocam ancak aynı hatayı vermekte.
  • 21-03-2021, 20:29:36
    #4
    hesapadim adlı üyeden alıntı: mesajı görüntüle
    merhaba
    $ayarlar["sosyal_medya"]
    burda bir sıkıntı var bu değişkenin içi muhtemelen boş veya bir array değildir
    print_r($ayarlar); yapabilir misiniz
    Array ( [site_favikon] => Array ( [url] => [id] => [width] => [height] => [thumbnail] => [alt] => [title] => [description] => ) [index-horn] =>
    Deneme Duyuru
    [index-text] => Son Eklenen [site_logo] => http://localhost/wordpress/wp-content/uploads/2021/03/logo.png [sosyal_medya] => [page_eror_image] => Array ( [url] => [id] => [width] => [height] => [thumbnail] => [alt] => [title] => [description] => ) [page_eror_text] => )
    Çıktısını vermekte.
  • 21-03-2021, 20:31:34
    #5
    hesapadim adlı üyeden alıntı: mesajı görüntüle
    gördüğünüz gibi sosyal_medya boş olduğu için bu hatayı alıyorsunuz
    Evet hocam bunun farkındayım yani hatanın nerde oluğunu biliyorum ancak nasıl düzelteceğimi bilmiyorum. Çünkü panel üzerinden bir sosyal medya eklemesi yaptığımda sorun kalmıyor.
  • 21-03-2021, 20:35:24
    #6
    hesapadim adlı üyeden alıntı: mesajı görüntüle
    anladım sadece boş iken alıyorsunuz yani hatayı

    <?php foreach ($ayarlar["sosyal_medya"] as $sosyal) {?>

    satırını
    <?php if(empty($ayarlar['sosyal_medya'])) $ayarlar['sosyal_medya'] = []; foreach ($ayarlar["sosyal_medya"] as $sosyal) {?>

    şeklinde yaparak çözebilirsiniz
    Hocam çok teşekkür ederim sorun çözüldü, ancak php konusunda biraz acemiyim biz burdan ne yapmış olduk? Size zahmet bunu açıklama şansınız var mı acaba.
  • 21-03-2021, 20:52:11
    #7
    hesapadim adlı üyeden alıntı: mesajı görüntüle
    $ayarlar["sosyal_medya"]
    bunu ayarladığınız yerde sıkıntı var aslında
    foreach'de kullanılabilmesi için array olması gerekli
    birden fazla olduğunda array yapıyorsunuz orda sorun yok
    ama hiç veri olmadığında, boş bırakıyorsunuz (null veya boş string)
    o da array olmadığı için foreach'de hata verir. ben de bu değişken null veya boş string ise, boş array'e çevirmesini sağladım

    $ayarlar["sosyal_medya"] nerde tanımlıyorsunuz onu atarsanız bakabilirim
    CSF::createSection( $prefix, array(
    
      'title'  => 'Sosyal Medya Yönetimi',
      'icon'  => 'far fa-heart',
      'fields' => array(
      
        array(
          'id'     => 'sosyal_medya',
          'type'   => 'group',
          'title'  => 'Sosyal Medya Ekle:',
          'fields' => array(
          
            array(
              'id'    => 'sosyal_link',
              'type'  => 'text',
              'title' => 'Sosyal Medya Linki',
            ),
            array(
              'id'    => 'sosyal_ikon',
              'type'  => 'icon',
              'title' => 'Sosyal Medya İkonu',
            ),
          )
        ),
    
      )
    ) );
    Codestar üzerinden bu şekilde tanımlıyorum hocam.

    Mesela aynı hatayı logo eklerken yapıyor yine boşken ama resim upload edince hata ortadan kalkıyor.

    <img src="<?php echo $ayarlar['site_logo']['url'];?>" alt="">
    Logo için bu şekilde bir ekleme yapıyorum. ['url'] olmadan resmi ekrana yazdırmıyor mecburen onu eklemem gerekiyor. Orasıda boş olunca ki haliyle tema ilk kurulduğunda boş olup kullanıcının kendi eklemesi gerekiyor panel üzerinden.

    O kısımda aldığım hata ise:

    Warning: Illegal string offset 'url'
  • 21-03-2021, 20:58:59
    #8
    hesapadim adlı üyeden alıntı: mesajı görüntüle
    bu framework hakkında bilgim yok ama default olarak empty array yapmayı araştırın
    Teşekkür ederim hocam yardımlarınız için.
  • 21-07-2021, 19:28:01
    #9
    hesapadim adlı üyeden alıntı: mesajı görüntüle
    anladım sadece boş iken alıyorsunuz yani hatayı

    <?php foreach ($ayarlar["sosyal_medya"] as $sosyal) {?>

    satırını
    <?php if(empty($ayarlar['sosyal_medya'])) $ayarlar['sosyal_medya'] = []; foreach ($ayarlar["sosyal_medya"] as $sosyal) {?>

    şeklinde yaparak çözebilirsiniz
    hocam aylar sonra birine daha yardımcı olmuş oldunuz