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.