• 22-10-2014, 15:39:23
    #1
    home.php dosyamda blocklarımı ayrı ayrı php dosyalarında barındırıp bunları anasayfaya çekmeye çalışıyorum. Fakat çektiğim dosyanın include 'block.php'; şeklinde görünmesini istemediğim için viewblock adlı bir fonksiyon yaptım ve örnek veriyorum
    <?= viewblock("newproducts"); ?>
    şeklinde yaptığım zaman bloğumu oraya çekmesini istedim. Fonksiyonum aşağıdaki gibi:

    fonksiyonum:

    if (!function_exists('viewblock'))
    {
       function viewblock($module)
       {
          $blockpath = "app/views/blocks/{$module}.php";
          return (include $blockpath);
       }
    }

    block kodlarım aşağıdaki gibi.


    <?php $np=0; foreach ($newproducts as $newproduct){ ?>
    	<section class="item news<?php if($np==0){ ?> active<?php } ?>">
    		<img src="<?= $newproduct['image']; ?>">
    		<div class="title">
    			<a href="/products/<?= $newproduct['id']; ?>/"><?= $newproduct['title']; ?></a>
    		</div>
    		<p><strong>Ürün Fiyatı:</strong> <?= $newproduct['price']; ?></p>
    		<a href="/products/<?= $newproduct['id']; ?>/" class="details">Detaylı Bilgi</a>
    	</section>
    <?php $np++; } ?>
    aldığım 2 hata:


    Notice: Undefined variable: newproducts in /Applications/XAMPP/xamppfiles/htdocs/proje/app/views/blocks/newproducts.php on line 10
    
    Warning: Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/proje/app/views/blocks/newproducts.php on line 10

    fonksiyon kullanmak yerine php dosyasını direkt olarak include etsem herhangi bir problem yok. Niye burada hata veriyor anlam veremedim.
  • 22-10-2014, 16:17:50
    #2
    $newproducts global olmadığı için fonksiyon içine taşınamıyordur. Fonksiyon içinde global olarak tanımlamalı yada en başta global değişken olarak tanımlamalısınız.

    if (!function_exists('viewblock'))
    {
       function viewblock($module)
       {
          global $newproducts;
          $blockpath = "app/views/blocks/{$module}.php";
          return (include $blockpath);
       }
    }
    veya en başından $GLOBALS['newproducts'] gibi global değişken olarak tanımlamalısınız.Bir başka seçenek fonksiyona yeni bir parametre ekleyip girdi olarak alabilirsiniz, son seçenek en uygun olanı diyebilirim. Tabi ki yapıyı siz biliyorsunuz en uygun olana siz karar vermesiliniz.
  • 22-10-2014, 16:23:49
    #3
    Met adlı üyeden alıntı: mesajı görüntüle
    $newproducts global olmadığı için fonksiyon içine taşınamıyordur. Fonksiyon içinde global olarak tanımlamalı yada en başta global değişken olarak tanımlamalısınız.

    if (!function_exists('viewblock'))
    {
       function viewblock($module)
       {
          global $newproducts;
          $blockpath = "app/views/blocks/{$module}.php";
          return (include $blockpath);
       }
    }
    veya en başından $GLOBALS['newproducts'] gibi global değişken olarak tanımlamalısınız.Bir başka seçenek fonksiyona yeni bir parametre ekleyip girdi olarak alabilirsiniz, son seçenek en uygun olanı diyebilirim. Tabi ki yapıyı siz biliyorsunuz en uygun olana siz karar vermesiliniz.
    malesef. daha önceden de denedim bunu ama sonuç alamadım. Hatta bunu yaptıktan sonra aldığım hata mesajı şu şekilde:

    Warning: Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/proje/app/views/blocks/newproducts.php on line 10
    1
  • 22-10-2014, 16:27:11
    #4
    Laravel Laravel
  • 22-10-2014, 16:28:45
    #5
    atay adlı üyeden alıntı: mesajı görüntüle
    Laravel Laravel
    deme öyle. ona da sıra gelecek
  • 22-10-2014, 16:31:51
    #6
    MVC yapısını anlamak, kurmak yerine şu an uygulamayı geliştirmeye başlamıştın, zaman kaybetme derim ama tercih senin
  • 22-10-2014, 16:32:55
    #7
    atay adlı üyeden alıntı: mesajı görüntüle
    MVC yapısını anlamak, kurmak yerine şu an uygulamayı geliştirmeye başlamıştın, zaman kaybetme derim ama tercih senin
    Yönetim panelini kodlayıp bitirmişim. Kullanıcı tarafının %60'ı bitmiş. Şimdi laravel'e geçersem vakit kaybı olacak.
  • 22-10-2014, 16:45:41
    #8
    function load_template( $template )
    {
    	ob_start();
    	include $template;
    	$content = ob_get_clean();
    	ob_end_flush();
    	return $content;
    }
    echo load_template('404.php');
    Şu üstte vermiş olduğum örneği inceleyip kendinize uyarlayabilirsiniz.
  • 22-10-2014, 16:52:07
    #9
    sesusera adlı üyeden alıntı: mesajı görüntüle
    function load_template( $template )
    {
    	ob_start();
    	include $template;
    	$content = ob_get_clean();
    	ob_end_flush();
    	return $content;
    }
    echo load_template('404.php');
    Şu üstte vermiş olduğum örneği inceleyip kendinize uyarlayabilirsiniz.
    aynı hatayı alıyorum malesef.