English

ما هو تَخريْج؟

هو مدير عناوين ويب (URLs) وموجّه بسيط جداً ومفتوح المصدر مبني بلغة PHP قابل للتخصيص، مناسب للمواقع البسيطة.

دليل الاستخدام:

كل ما عليك فعله هو تنزيل الكود المصدري (source code)، وتخزينه في جذر الويب الخاصّ بك، يَفتَرِض تَخريْج أن صفحات الويب الخاصّة بك موجودة داخل مجلد بعنوان pages موجود تحت جذر الويب الخاصّ بك مباشرةً (يمكنك تغيير ذلك من خلال تعديل بسيط على التعليمة البرمجيّة في السطر رقم 77)، كما ويفترض أنك تستخدم نَسْق (layout) موحّد لجميع الصفحات (header و footer) وموجودة في مجلد بعنوان layout وموجود تحت جذر الويب الخاصّ بك مباشرةً (يمكنك تعديله أو إلغاؤه من خلال مسح السطرين رقم 75 و79).
في حال استخدمت تَخريْج كما هو، فإن تصنيف الملفات في جذر الويب الخاص بك سيكون يشبه هذا *:
root

├── index.php

├── layout
│   │
│   ├── header.php
│   └── footer.php

└── pages
    │
    ├── home.php
    ├── 404.php
    ├── about.php
    ├── contact.php
    │
    └── thread
        │
        ├── add.php
        ├── view.php
        └── index.php
ببساطة، لو طلبت العنوان yoursite.com فإنّ ملف home.php سيُعرض، ولو طلبت yoursite.com/about فإنّ ملف about.php سيُعرض، ولو طلبت العنوان yoursite.com/thread/add فإنّ ملف add.php سيُعرض، وهكذا، مع ذكر أن ملفيّ header.php و footer.php سيُعرضان مع كلّ ملف يتم عرضه (header.php قبله و footer.php بعده) ما لم تقم بإلغائهما أو تعديلهما.
* ما في الخط المائل هي أمثلة

ملاحظة مهمّة:

ملف .htaccess الخاص بك يجب أن يحتوي الأسطر التالية:
1RewriteEngine On
2RewriteCond %{REQUEST_FILENAME} !-f
3RewriteCond %{REQUEST_FILENAME} !-d
4RewriteRule ^/?(.*) index.php [L]

التنزيل والتطوير:

تَخريْج هو بذرة مفتوحة المصدر لمدير عناوين ويب وموجّه بسيط جداً سيتم التطوير عليه لاحقاً، يمكنك المشاركة في تطويره أو تحميله على GitHub.
أو يمكنك تحميله مباشرة من هنا.

الكود المصدري:

<?php
 /**
 * Project:     Takhreej: Simple PHP Open Source Web Addresses (URLs) Manager
 * File:        index.php
 *
 * Copyright (c) 2014, Mohammad Anini
 * The project is licensed under Waqf Public License 2.0 <http://ojuba.org/wiki/waqf-2.0/>
 *
 * @link http://takhreej.anini.me/
 * @copyright 2014 Anini
 * @author Mohammad Anini <mohd.anini@gmail.com>
 * @version 1.0.0 (Feb 3, 2014)
 * @package Takhreej
 */
/**
 * Important notes:
 * 
 * 1. The .htacess file should have the following lines:
 * 
 *    RewriteEngine On
 *    RewriteCond %{REQUEST_FILENAME} !-f
 *    RewriteCond %{REQUEST_FILENAME} !-d
 *    RewriteRule ^/?(.*) index.php [L]
 *
 * 2. All the pages should be saved as .php files
 *
 * 3. This URL Manager supposed that all the pages are stored under "pages" directory which
 *    is under the root directory (you can change it!).
 *
 * 4. The main layout (footer & header) should be stored under "layouts" directory which is
 *    under the root directory (you can change it!).
 */
if (!empty($_SERVER['REQUEST_URI']))
{
    $root = dirname(__FILE__);
    // The requested URI
    $file_name = $_SERVER['REQUEST_URI'];
    // The actual index page (home page) must have another name or another location to avoid
    // recursion, we supposed that it's in the pages directory with "home.php" name (you can
    // change it!).
    if ($file_name == '/index.php' || $file_name == '/')
    {
        $file_name = 'home';
    }
    
    // Change the following to set title and description for every page in your site, and you
    // can use these variables in the header if you are using layout (header & footer),
    // otherwise just remove or comment out the following switch satement.
    switch ($file_name) {
        case 'banana':
            $title = 'I love banana!';
            $description = 'I love banana!';
            break;
        default:
            // Used for the home page
            $title = 'My lovely site!';
            $description = 'You will fall in love with my site!';
            break;
    }
    // If the requested file is not exists, the 404 page (which must be in the "pages"
    // directory) will be rendered.
    if (!file_exists($root . '/pages/' . $file_name . '.php'))
    {
        header('HTTP/1.0 404 Not Found');
        $file_name = '404';
    }
    // Rendering the header
    require_once $root . '/layout/header.php';
    // Rendering the requested page
    require_once $root . '/pages/' . $file_name . '.php';
    // Rendering the footer
    require_once $root . '/layout/footer.php';
    exit;
}