Include Footer in main page
سلام.
من توی یک پروژه هدر و فوتر صفحه اصلی/کل صفحات رو توی یک دو فایل header و footer گذاشتم.
این به حساب صفحه اصلیه :
<?php
include('model/database.php');
include('model/post.php');
include('model/post_db.php');
include('model/category.php');
include('model/category_db.php');
include('view/header.php');
...
....
.....
......
.......
......
.....
....
...
/*
* include footer
*/
// Get the list of categories for show in footer.php
$categories = CategoryDB::getCategories();
include('view/footer.php');
?>
در خطوط 2 تا 8 من فایل هایی رو که لازمه include کردم. در خط 31 من یک لیست دسته بندی ها از دیتابیس رو توی یک متغییر ذخییره کرده و میخوام که وقتی به خط بعدی رفت و footer رو include کرد ، این متغییر هم به همراهش به footer بره و اونجا کارمو باهاش انجام بدم.
خوب الان مشکل اینه که من به این متغییر categories در footer دسترسی ندارم.
مشکل کار من کجاست ؟
باید به روش دیگری این کار رو انجام بدم؟
نقل قول: Include Footer in main page
بالای صفحه فوتر، بنویسید:
global $categories;
نقل قول: Include Footer in main page
کد فوتر رو بگذارین. اگه با تابع کار نکرده باشین، باید بتونید به categories$ دسترسی داشته باشین و نیازی به global نیست ولی اگه از تابع استفاده کردین، باید داخل تابع از global برای دسترسی به متغیرهای سراسری استفاده کنید.
1 ضمیمه
نقل قول: Include Footer in main page
خوب راستش این کد صفحه اصلی هستش که من تو کد بالا حذفش کردم.
<?php
include('model/database.php');
include('model/post.php');
include('model/post_db.php');
include('model/category.php');
include('model/category_db.php');
include('view/header.php');
if(isset($_POST['action'])) {
$action = $_POST['action'];
} else if(isset($_GET['action'])){
$action = $_GET['action'];
} else {
$action = 'show_posts';
}
if ($action == 'show_posts') {
//Show All posts
$posts = PostDB::getPosts();
include('posts.php');
}
/*
* include footer
*/
// Get the list of categories for show in footer.php
$categories = CategoryDB::getCategories();
include('view/footer.php');
?>
اینجا همونطور که میبینید 17 ت 23 حتما اجرا میشه و تو خط 21 از include استفاده شده و متغییر خط 21 رو بدون مشکل میفرسته.
اینجا خط 32 هم اجرا میشه خوب مطمئنن و محتویات فوتر هم بارگذاری میشه. فقط مشکل اینه که من نمیتونم از categories که فرستادمش به Footer ، استفاده بکنم.
این هم کد Footer
</div><!-- /.blog-main -->
<div class="col-sm-3 col-sm-offset-1 blog-sidebar">
<div class="sidebar-module sidebar-module-inset">
<h4>About</h4>
<p>Etiam porta <em>sem malesuada magna</em> mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.</p>
</div>
<div class="sidebar-module">
<h4>Catogeries</h4>
<ol class="list-unstyled">
<?php foreach($catogeries as $category):?>
<li><a href="<?php echo $category->getID();?>"><?php echo $category->getName(); ?></a></li>
<?php endforeach; ?>
</ol>
</div>
</div><!-- /.blog-sidebar -->
</div><!-- /.row -->
</div><!-- /.container -->
<footer class="blog-footer">
<p>PHPLoversBlog ©</p>
<p>
<a href="#">Back to top</a>
</p>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="js/bootstrap.js"></script>
</body>
</html>
این هم خطایی که در حال حاضر برای این کد نشون میده
ضمیمه 130827
نقل قول: Include Footer in main page
من همین کاری که میخوام تو صفحه Footer انجام بدم رو تو صفحه اصلی به به شکل زیر انجام دادم و داده هایی رو که میخواستم بخوبی برام نشون داد تو صفحه اصلی.
.
.
.
/*
* include footer
*/
// Get the list of categories to show in footer.php
$categories = CategoryDB::getCategories();
foreach ($categories as $category) {
echo $category->getName()."\n";
}
.
.
.
کد HTML:
output was:
News Events Tutorials Misc
پس نتیجه میگیریم که مشکل از فرستاده شدن $categories به Footer است. البته از قبل هم معلوم بود. ولی حالا چجوری حلش کنم ؟
ممنون دوستان از جوابتون :قلب:
نقل قول: Include Footer in main page
این یک باگ بزرگ در php هستش. وقتی شما متغیری رو بخوای به یک صفحه دیگه بفرستی، در صورتی که نام اون صفحه footer.php باشه و داخل فولدری به نام view باشه، php به دلایل ضعف در طراحی از استفاده از متغیرهای ارسالی جلوگیری میکنه. نکته جالب اینجاست که من شوخی کردم. چون توی foreach ای که توی فوتر نوشتی، به جای categories نوشتی catogeries :لبخند:
نقل قول: Include Footer in main page
اوه خدای من :|
آبروم پیش جماعت رفت !! LOL
ممنون از راهنماییتون دوستان :لبخند:
اینبار سعی میکنم غلط املایی نداشته باشم :))
نقل قول: Include Footer in main page
منم این مشکل رو دارم دوست عزیز...
اما خب با یه IDE میشه جلوی این اشتباهات رو گرفت...