موقع offres d'emplois بإستعمال YII2 Framework الجزء الثاني

imadbelasri Yii2
YI

فهاد الجزء الثاني من موقع offres d'emplois بإستعمال YII2 Framework غادي نكملو الملفات لي غادي يمكنوا المستخدم من إضافة فرصة عمل تعديلها وحدفها وأيضا الملف لي غادي يمكن من عرض المعلومات الخاصة بفرصة عمل اختارها المستخدم.


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


1- الملف jobs/create.php

دائما فالمجلد jobs فيه زيد ملف جديد سميه create.php هادا الملف لي فيه الفورم لي كتمكن المستخدم من إضافة offre فالموقع فمنبعد مكيدخل المعلومات ديالو فالحقول هاد المعلومات كتمشي لل fonction actionCreate لي كاينة JobsController الكود ديال الملف هو :

                                                    
                                                        <?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use app\models\Category;
/* @var $this yii\web\View */
/* @var $model app\models\Job */
/* @var $form ActiveForm */
?>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
    <h3 class="text-info">Ajouter une offre</h3>
    <hr>
        <?php $form = ActiveForm::begin(); ?>
            <?= $form->field($job, 'category_id')->label('Catégorie*')
                ->dropDownList(Category::find()
                ->select(['name','id'])
                ->indexBy('id')
                ->column(),['prompt'=>'Veuillez choisir une catégorie:'])?>
            <?= $form->field($job, 'title')->label('Titre*') ?>
            <?= $form->field($job, 'description')->label('Déscription*')->textArea(['rows'=>'6','cols'=>'50']) ?>
            <?= $form->field($job, 'type')->label('Type*')->dropDownList([
                    'CDI'=>'CDI',
                    'CDD'=>'CDD'
                ],['prompt'=>'Veuillez choisir un type:']
                )?>
            <?= $form->field($job, 'competences')->label('Compétences*') ?>
            <?= $form->field($job, 'salary')->label('Salaire*') ?>
            <?= $form->field($job, 'city')->label('Ville*') ?>
            <?= $form->field($job, 'contact_email')->label('Email*') ?>
            <?= $form->field($job, 'contact_phone')->label('Téléphone*') ?>
            <?= $form->field($job, 'is_published')->label('Publier*')->radioList([
                    1=>'Oui',
                    0=>'Non'
                ]
                ) ?>
            <div class="form-group">
                <?= Html::submitButton('Valider', ['class' => 'btn btn-primary']) ?>
            </div>
        <?php ActiveForm::end(); ?>
    </div>
</div><!-- jobs-create -->

                                                    
                                                

2- الملف jobs/edit.php

دائما فالمجلد jobs فيه زيد ملف جديد سميه edit.php هادا الملف لي فيه الفورم لي كتمكن المستخدم من تعديل offre فالموقع فمنبعد مكيدخل المعلومات ديالو فالحقول هاد المعلومات كتمشي لل fonction actionEdit لي كاينة JobsController الكود ديال الملف هو :

                                                        
                                                            <?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use app\models\Category;
/* @var $this yii\web\View */
/* @var $model app\models\Job */
/* @var $form ActiveForm */
?>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
    <h3 class="text-info">Modifier une offre</h3>
    <hr>
        <?php $form = ActiveForm::begin(); ?>
            <?= $form->field($job, 'category_id')->label('Catégorie*')
                ->dropDownList(Category::find()
                ->select(['name','id'])
                ->indexBy('id')
                ->column(),['prompt'=>'Veuillez choisir une catégorie:'])?>
            <?= $form->field($job, 'title')->label('Titre*') ?>
            <?= $form->field($job, 'description')->label('Déscription*')->textArea(['rows'=>'6','cols'=>'50']) ?>
            <?= $form->field($job, 'type')->label('Type*')->dropDownList([
                    'CDI'=>'CDI',
                    'CDD'=>'CDD'
                ],['prompt'=>'Veuillez choisir un type:']
                )?>
            <?= $form->field($job, 'competences')->label('Compétences*') ?>
            <?= $form->field($job, 'salary')->label('Salaire*') ?>
            <?= $form->field($job, 'city')->label('Ville*') ?>
            <?= $form->field($job, 'contact_email')->label('Email*') ?>
            <?= $form->field($job, 'contact_phone')->label('Téléphone*') ?>
            <?= $form->field($job, 'is_published')->label('Publier*')->radioList([
                    1=>'Oui',
                    0=>'Non'
                ]
                ) ?>
            <div class="form-group">
                <?= Html::submitButton('Valider', ['class' => 'btn btn-primary']) ?>
            </div>
        <?php ActiveForm::end(); ?>
    </div>
</div><!-- jobs-create -->

                                                        
                                                    

3- الملف jobs/view.php

دائما فالمجلد jobs فيه زيد ملف جديد سميه view.php هادا الملف لي فيه الكود لي كيمكن من عرض المعلومات الخاصة ب offre اختارو المستخدم من بعد مكنستقبلوهم من fonction actionView لي فالملف JobsController.php وأيضا كاين الروابط لي كيمكنو من تعديل وحدف offre الكود ديال الملف هو :

                                                        
                                                            <?php
/* @var $this yii\web\View */
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<div class="row">
<div class="col-md-12">
<h1 class="text-info">
<?php echo $job->title;?>
<?php if(isset(Yii::$app->user->identity->id) && (Yii::$app->user->identity->id == $job->user_id)):?>
<a href="/yii2_job_website/web/index.php?r=jobs/edit&id=<?php echo $job->id;?>" class="btn btn-warning pull-right" style="margin:5px;">Modifier</a>
<a href="/yii2_job_website/web/index.php?r=jobs/delete&id=<?php echo $job->id;?>" class="btn btn-danger pull-right" style="margin:5px;">Supprimer</a>
<?php endif;?>
</h1>
</div>
</div>
<hr>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
    <ul class="list-group">
        <li class="list-group-item">
            <span class="label label-primary">
            Catégorie:
            <?php
                echo  $job->category->name;
            ?>
            </span>
        </li>
        <li class="list-group-item"> <span class="label label-success"><?php echo "Ville : ".$job->city;?></span> <span class="label label-danger pull-right"><?php echo "Type : ".$job->type;?></span></li>
     </ul>
    <h4>Déscription:</h4>
    <hr>
    <div class="well">
        <?php echo $job->description;?>
    </div>
        <ul class="list-group">
            <li class="list-group-item">
                <span class="label label-primary">
                Ajoutée le:
                <?php
                    echo  Yii::$app->formatter->asDatetime($job->created_at);
                ?>
                </span>
            </li>
            <li class="list-group-item">
                <strong><span class="text-inverse">Compétences:</span></strong>
                <?php
                    echo $job->competences;
                ?>
            </li>
            <li class="list-group-item">
                <strong><span class="text-inverse">Salaire:</span></strong>
                <?php
                    echo $job->salary;
                ?>
            </li>
            <li class="list-group-item">
                <strong><span class="text-inverse">Téléphone:</span></strong>
                <?php
                    echo $job->contact_phone;
                ?>
            </li>
            <li class="list-group-item">
                <strong><span class="text-inverse">Email:</span></strong>
                <?php
                    echo $job->contact_email;
                ?>
            </li>
        </ul>
    </div>
</div>

                                                        
                                                    

4- الملف jobs/jobs_by_category.php

دائما فالمجلد jobs فيه زيد ملف جديد سميه jobs_by_category.php هادا الملف لي فيه الكود لي كيمكن من عرض المعلومات الخاصة ب offre اختارو المستخدم بواسطة الفئة ديالو أي ل catégorie فمن بعد مكنستقبلوا المعلومات من fonction actionCategory لي فالملف JobsController.php وأيضا كاين الرابط لي كيمكن من إضافة offre جديد الكود ديال الملف هو :

                                                        
                                                            <?php
/* @var $this yii\web\View */
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<div class="row">
<div class="col-md-4">

</div>
<div class="col-md-8">
<a href="/yii2_job_website/web/index.php?r=jobs/create" class="btn btn-primary pull-right">Ajouter</a>
</div>
</div>
<hr>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
    <?php if(Yii::$app->session->getFlash('success') != null):?>
         <div class="alert alert-success"><?= Yii::$app->session->getFlash('success'); ?></div>
    <?php endif;?>
        <ul class="list-group">
            <?php if($jobs != null):?>
                <?php foreach($jobs as $job):?>
                    <li class="list-group-item"><a href="/yii2_job_website/web/index.php?r=jobs/view&id=<?php echo $job->id;?>" class="btn btn-link"><?php echo $job->title;?></a><span class="label label-success"><?php echo $job->city;?></span> 
                    <span class="label label-danger"><?php echo $job->type;?></span>
                    <span class="label label-info">
                    <?php
                        echo  Yii::$app->formatter->asDatetime($job->created_at);
                    ?>
                    </span></li>
                <?php endforeach;?>
            <?php else:?>
            <div class="alert alert-info">Aucune offre trouvée!</div>
            <?php endif;?>
        </ul>
    </div>
</div>

                                                        
                                                    

5- الملف CategoriesController.php

كنمشي للمجلد controllers كنزيد ملف جديد كنسميه CategoriesController.php لي غادي تكون فيه fonction behaviors لي كتمنع على المستخدم يلا مكانش مكونيكطي يزيد فئة اي catégorie من بعد كاين fonction actionIndex لي كتسترجع les catégories لي عندنا فقاعدة البيانات وكترسلهم للملف index ديال les catégories ولي غادي نزيدو من بعد وكتحدد ل pagination ف 10 ولي كتمكنا باش نعرضو فقط عشرة ديال les catégories فالصفحة ثم كاين fonction actionCreate لي كتوجه المستخدم لملف إضافة catégorie و لي غادي نزيدوه من بعد فمنبعد مكيدخل المعلومات ل fonction actionCreate كتحقق واش حتى شي حقل ما خاوي منبعد كتزيدهم فالجدول categories الكود ديال الملف هو :

                                                        
                                                            <?php
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\Category;
use yii\data\Pagination;
class CategoriesController extends \yii\web\Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['create'],
                'rules' => [
                    [
                        'actions' => ['create'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ]
        ];
    }
    public function actionCreate()
    {
        $categorie = new Category();
        if ($categorie->load(Yii::$app->request->post())) {
            if ($categorie->validate()) {
               // form inputs are valid, do something here
               //save data
               $categorie->save();
               \Yii::$app->getSession()->setFlash('success', 'Catégorie ajoutée.');
               return $this->redirect('index.php?r=categories');
            }
        }
        return $this->render('create', [
            'categorie' => $categorie,
        ]);
    }

    public function actionIndex()
    {
        //get all categories from database
        $query = Category::find();
        //use pagination
        $pagination = new Pagination([
            'defaultPageSize' => 10,
            'totalCount' => $query->count(),
        ]);
        $categories = $query->orderBy('name')
        ->offset($pagination->offset)
        ->limit($pagination->limit)
        ->all();
        return $this->render('index',[
            'categories' => $categories,
            'pagination'=>$pagination
        ]);
    }

}