loc adlı üyeden alıntı: mesajı görüntüle
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.


Problem include edilen dosyanın içindeki $newproducts değişkeninin fonksiyon içinde tanımlanmamasından kaynaklanıyor.
Fonksiyona modul ismi ile birlikte newproducts değişkenini de vermek gerekiyor.
Mesela


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


<?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++; } ?>

<?= viewblock("newproducts", $newproducts); ?>
Global scope değişkeni local scope fonksiyon içinde çağıramazsınız. Ya çağıracağınız değişkeni fonksiyon içinde global olarak tanımlamanız, ya da fonksiyona vereceğiniz ek bir parametre ile fonksiyon içine aktarmanız lazım.