موقع روابط إنترنيت بإستعمال phpixie framework الجزء الاول


فهاد المشروع الجديد من موقع روابط بإستعمال phpixie framework غادي نشوفو كيفاش نقادو موقع بسيط كيعرض روابط للمواقع الشهيرة فالانترنيت وغادي نشوفو كيفاش نزيدو نعدلو ونمسحوا معلومات من قاعدة البيانات كما غادي نشوفو كيفاش نتكونيكطاو ونديكونيكطاو دائما بإستعمال phpixie framework لي هي وحدة من php framework ولي كتصنف من بين العشر الأوائل.

نظرة سريعة بالفيديو

1- إنشاء قاعدة البيانات

أول حاجة غادي نديرو هي غادي نزيدو قاعدة بيانات جديدة ف phpmyadmin نسميوها weblinks من بعد غادي نزيد فيها 2 ديال لtables نسميهم users,weblinks هادي هي قاعدة البيانات لي غادي تمكنا من حفظ الروابط لي غادي نزيدوها الكود باش تزيد الجداول فقاعدة البيانات هو :

                                --
-- Structure de la table `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) DEFAULT NULL,
  `passwordHash` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Structure de la table `weblinks`
--

CREATE TABLE `weblinks` (
  `id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `url` varchar(255) NOT NULL,
  `category` varchar(255) NOT NULL,
  `username` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
                            

2- تحميل PHPixie

أول شيء غادي تديرو هو تثبيت composer لي غادي يمكنك من تثبيت PHPixie يمكنلك تبحث عليه فغوغل وتحملو من الموقع الرسمي من بعد غادي تشوف البداية ديال الفيديو فيه كاين كيفاش تحمل المشروع من بعد ما يتزاد المجلد ف xampp سير ل htdocs منبعد باش تربط الإتصال بقاعدة البيانات غادي تمشي ل assets/config/database.php وغادي تدير تعديلات على الكود غادي تزيد سمية قاعدة البيانات لي زدتي فphpmyadmin ولuser لي هو root وكلمة المرور الكود ديال الملف ملي تغير هو :

                                <?php

return array(
    'default' => array(
        'database' => 'weblinks',
        'user'     => 'root',
        'password' => '',
        'adapter'  => 'mysql', // one of: mysql, pgsql, sqlite
        'driver'   => 'pdo'
    )
);
                            

3- الصفحة الأساسية

فالصفحة لي غادي تكون هي الأساس ديال كل الصفحات وغادي يكون فيها روابط css وjavascript والقائمة ديال التصفح هي فbundles/app/assets/templates ولي هي layout.php وفالقائمة كاين accueil لي كتدي لل controller weblink غادي نزيدوه من بعد ثم كاين connexion لي كتدي لل controller Auth والرابط كيبان فقط يلا كان المستخدم ممكونيكطيش ثم كاين Déconnexion لي كتدي لل controller Auth ولل fonction logout لي كتمكن المستخدم باش يديكونيكطا والرابط كيبان فقط يلا كان المستخدم مكونيكطي ثم كاين connexion لي كتدي لل controller Auth وهاد الصفحة كتزاد فكل الصفحات والمحتوى ديال الصفحات الأخرى كيتعرض وسطها الكود ديال الملف هو :

                                <!DOCTYPE html>
<html>
	<head>
		<!-- Bootstrap 4 -->
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<meta http-equiv="x-ua-compatible" content="ie=edge">
		<!-- Latest compiled and minified CSS -->
		<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
		<!-- Our own CSS, about that later -->
		<link rel="stylesheet" href="/bundles/app/main.css">
		<!-- If a child layout doesn't set the page title, we just use 'Quickstart' -->        
		<title><?=$_($this->get('pageTitle', 'Weblinks Porject'))?></title>
	</head>
	<body>
       <nav class="navbar navbar-default">
			<div class="container">
				<div class="navbar-header">
				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
					<span class="sr-only">Toggle navigation</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="#">Weblinks</a>
				</div>
				<div id="navbar" class="collapse navbar-collapse">
				<ul class="nav navbar-nav">
					<li class="active"><a href="/weblink">Accueil</a></li>
					<?php if(isset($_SESSION['defaultUserId']) && $_SESSION['defaultUserId'] != null): ?>
						<!-- If user is loged in display a welcome message and a Sign Out button -->
						<span class="navbar-text  mr-auto">
							Bienvenue, <b><?=$_($_SESSION['username'])?></b>
						</span>
						<li class="nav-item">
							<?php $url = $this->httpPath('app.action', ['processor' => 'auth', 'action' => 'logout']);?>
							<a class="nav-link" href="<?=$url?>">Déconnexion</a>
						</li>
						<li><a href="/weblink/admin">Admin</a></li>
					<?php else: ?>
					<!-- Otherwise show a Sign In link -->
						<li class="nav-item">
							<?php $url = $this->httpPath('app.processor', ['processor' => 'auth']);?>
							<a class="nav-link" href="<?=$this->httpPath('app.processor', ['processor' => 'auth'])?>">Connexion</a>
						</li>
						<li><?php $url = $this->httpPath('app.processor', ['processor' => 'auth']);?>
							<a class="nav-link" href="<?=$this->httpPath('app.processor', ['processor' => 'auth'])?>">Inscription</a>
		 			<?php endif;?></li>
				 </ul>
				</div><!--/.nav-collapse -->
			</div>
		</nav>
		<div class="container">
			<?php $this->childContent();?>
		</div>
		<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
	</body>
</html>

                            

4- الملف Weblink.php

فالمجلد bundles/app/src/HTTP كتزيد ملف جديد سميه Weblink.php وهنا ل Processors هما لcontrollers عند لframeworks لخرين هاد ل controller فيه ل les fonctions لي غادي يمكنو من التعامل مع الروابط فأولا كاين defaultAction لي كتسترجع الروابط من قاعدة البيانات وكترسلهم للصفحة weblink لي غادي تمكن من عرض الروابط ولي هي الصفحة الرئيسية ثم كاين viewAction لي كتسترجع رابط اختارو المستخدم بالإعتماد على لid ديالو وكترسلو للصفحة view لي غادي تمكن من عرض المعلومات الخاصة برابط ثم كاين adminAction لي كتسترجع الروابط من قاعدة البيانات وكترسلهم للصفحة admin لي غادي تمكن من عرض الروابط ولي هي الصفحة الخاصة بالأدمن ثم كاين addAction لي كتمكن من إضافة رابط ولي غادي تكون فالملف add ثم كاين editAction لي كتعمر الفورم ديال التعديل بالمعلومات الخاصة برابط اختارو الأدمن بالإعتماد على ل id ديالو ثم كتعدلو ثم كاين deleteAction لي كتحدف رابط اختارو الأدمن بالإعتماد على لid ديالو الكود ديال الملف هو :

                                    <?php
namespace Project\App\HTTP;
use PHPixie\HTTP\Request;
/**
 * Lists the messages
 */
class Weblink extends Processor
{
    /**
     * @param Request $request HTTP request
     * @return mixed
     */
    public function defaultAction()
    {
        //get all links from database
        $components = $this->components();
        $weblinks = $components->orm()->query('weblink')
            ->orderDescendingBy('create_date')
            ->find();
        return $components->template()->get('app:weblink', [
            'weblinks' => $weblinks
        ]);
    }
    public function viewAction(Request $request)
    {
        $components = $this->components();
        $id = $request->attributes()->get('id');
        $weblink = $components->orm()->query('weblink')
            ->where('id',$id)
            ->findOne();
        return $components->template()->get('app:view', [
            'weblink' => $weblink
        ]);
    }
    public function adminAction()
    {
        $components = $this->components();
        $weblinks = $components->orm()->query('weblink')
            ->orderDescendingBy('create_date')
            ->find();
        return $components->template()->get('app:admin', [
            'weblinks' => $weblinks
        ]);
    }
    public function addAction(Request $request)
    {
        if ($request->method() == 'POST'){
            $title = $request->data()->get('title');
            $url = $request->data()->get('url');
            $category = $request->data()->get('category');
            $username = $request->data()->get('username');
            $description = $request->data()->get('description');
            $weblinkRepository = $this->components()->orm()->repository('weblink');
            $weblink = $weblinkRepository->create();
            $weblink->title = $title;
            $weblink->url = $url;
            $weblink->category = $category;
            $weblink->username = $username;
            $weblink->description = $description;
            $weblink->save();
            $http = $this->builder->components()->http();
            $httpResponses = $http->responses();
            return $httpResponses->redirect('/weblink/admin');
        }
        $components = $this->components();
        return $components->template()->get('app:add');
    }
    public function editAction(Request $request){
        $id = $request->attributes()->get('id');
        if ($request->method() == 'POST'){
            $title = $request->data()->get('title');
            $url = $request->data()->get('url');
            $category = $request->data()->get('category');
            $username = $request->data()->get('username');
            $description = $request->data()->get('description');
            $weblinkRepository = $this->components()->orm()->repository('weblink');
            $weblinkRepository->query('weblink')
            ->where('id',$id)
            ->update(array(
                'title'=>$title,
                'url'=>$url,
                'category'=>$category,
                'username'=>$username,
                'description'=>$description
            ));
            $http = $this->builder->components()->http();
            $httpResponses = $http->responses();
            return $httpResponses->redirect('/weblink/admin');
        }
        $components = $this->components();
        $weblink = $components->orm()->query('weblink')
            ->where('id',$id)
            ->findOne();
        return $components->template()->get('app:edit', [
            'weblink' => $weblink
        ]);
    }
    public function deleteAction(Request $request)
    {
        $components = $this->components();
        $id = $request->attributes()->get('id');
        $weblink = $components->orm()->query('weblink')
            ->where('id',$id)
            ->delete();
        $http = $this->builder->components()->http();
        $httpResponses = $http->responses();
        return $httpResponses->redirect('/weblink/admin');
    }
}
                                

5- الملف weblink.php

فالمجلد bundles/app/assets/templates كنزيد ملف كنسميه weblink.php لي هو الصفحة الرئيسية ديالنا ولي كتستقبل الروابط لي ترسلو من لfonction defaultAction وكنخدم ب foreach باش كنعرض المعلومات الخاصة بكل رابط الكود ديال الملف هو :

                                    <?php
// Define parent layout
$this->layout('app:layout');

// Set the pageTitle variable
// that is used by the parent template uses to display page title
$this->set('pageTitle', "Weblinks");
?>
<div class="row">
    <div class="col-md-6 col-md-offset-2">
        <?php foreach($weblinks as $link): ?>
            <blockquote class="blockquote">
                <a href="<?=$_($link->url)?>" class="btn btn-link" target="_blank"><strong><?=$_($link->title)?></strong></a>
                <small class="text-default"><?=$_($link->description)?></small>
                <footer class="blockquote-footer">
                    Ajouté: <span class="text-danger"><?=$this->formatDate($link->create_date, 'j M Y, H:i')?></span>
                </footer>
            </blockquote>
        <?php endforeach; ?>   
    </div>
</div>     

                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


إشترك للتوصل بالجديد