تولید آدرس
در جالنوبرای تولید آدرس قابل دسترس در مرورگر از سه روش میتوان استفاده کرد که هر روش برای دسترسی به فایل های مختلفی استفاده میشود که به شرح زیر میباش د.
متد / تابع | دسترسی به فایل |
---|---|
packages\base\url | لینک به صفحات |
packages\base\frontend\theme::url | لینک به فایل های استاتیک قالب |
packages\base\package::url | لینک به فایل های استاتیک پکیج |
لینک به صفحات
برای ادرس دهی و لینک شدن به صفحات مختلف از تابع packages\base\url
استفاده میشود .
این تابع سه ارگومان ورودی میگیرد;
آرگومان اول ادرس صفحه مورد نظری را میگیرد که در فایل routing.json
تعریف شده است.
برای اطلاعات بیشتر به صفحه مسیریابی مراجعه کنید.
نمونه فایل routing.json
[
{
"path": "/",
"controller": "controllers/Main@index"
},
{
"path": "about-us",
"controller": "controllers/Main@aboutus"
}
]
آرگومان دوم آرایه میباشد که برای آن index های @hostname
, @lang
, @encode
تعریف شده هستند و همچنین میتوان index های دلخواه نیز برای آن تعریف کرد .
آرگومان سوم boolean
است، که مقدار پیش فرض آن false
میباشد. اگر ایندکس @hostname
در آرایه آرگومان دوم تعریف شده باشد و مقدار آرگومان سوم true باشد مقدار @hostname
را بعنوان دامین url قرار میدهد اما درصورتی که false باشد @hostname
را به ادام ه ی url اضافه میکند.
معرفی ایندکس های آرگومان دوم
در این آرایه سه ایندکس @hostname
, @lang
, @encode
تعریف شده است
همچنین میتوانیم به تعداد دلخواه ایندکس تعریف کنیم و مقدار دهیم که این ایندکس ها به ادامه ی آدرس url اضافه میشوند.
مثال :
<?php
namespace packages\my_package\controllers;
use packages\base\{response, controller, http};
use packages\my_package\views;
class Main extends controller {
public function login(): response {
$view = view::byName(views\login::class);
$this->response->setView($view);
if(http::is_post()) {
$inputRules = array(
"username" => array(
"type" => "email",
),
"password" => array()
);
$inputs = $this->checkinputs($inputRules);
$user = new user();
$user->where("email", $inputs["username"]);
$user->where("password", md5($inputs["password"]));
if ($user->getOne()) {
$this->response->Go(base\url("userpanel"), ["key1" => "value1", "@lang" => "en"]);
/* output
/en/userpanel?key1=value1
*/
}
}
return $this->response;
}
}
?>
@lang : با استفاده از ایندکس @lang میتوانیم زبان مورد نظر را برای آدرس url تعیین کنیم. مقدار ایندکس میتواند کد زبان دو حرفی باشد.
درصورتی میتوانیم زبان را تعیین کنیم که تنظیات زبان در فایل config.php
در مسیر packages/base/libraries/config
مجوزه تغییر زبان را داده باشیم.
تنظیمات زبان
در فایل config.php
در مسیر packages/base/libraries/config
میتوانیم تنظیمات زبان پیشفرض
و تغییر زبان
و امکان مخفف وارد کردن زبان
را انجام دهیم .
- زبان پیش فرض :
با استفاده از آپشن
packages.base.translator.defaultlang
میتوانیم زبان پیش فرض سایت را مشخص کنیم. مقدار وارد شده باید کد زبان کامل باشد. اگر این آپشن مقدار دهی نشود, هر کد زبان کاملی را میپذیرد. کد زبان کامل از کد زبان دو حرفی_کد کشور دو حرفی تشکیل میشود
'packages.base.translator.defaultlang' => 'fa_IR' // or en_US
- تغییر زبان :
با استفاده از آپشن
packages.base.translator.changelang
مشخص میکنیم کاربر از چه روشی زبان را مشخص کند. سه مقدار میتواند داشته باشد :
مقدار | کاربرد |
---|---|
uri | زبان در ابتدای ادرس اضافه میشود |
parameter | انتهای آدرس اضافه میشود |
خالی باشد | کاربر نمیتواند بطور مستقیم زبان را تغییر دهد |
مثال uri :
/fa/contactus
مثال parameter :
/contactus?lang=fa
مثال از خالی بودن : زبان در آدرس اضافه نمیشود
/contactus
- مخفف وارد کردن زبان :
با استفاده از آپشن
packages.base.translator.changelang.type
امکان مخفف وارد کردن زبان را در آدرس میدهد . آپشن مقادیرshort
,complete
میگیرد.
مثال
'packages.base.translator.changelang.type' => 'short' // fa
'packages.base.translator.changelang.type' => 'complete' //fa_IR
نمونه فایل config.php
'packages.base.translator.defaultlang' => 'fa_IR',
'packages.base.translator.changelang' => 'parameter', //uri, parameter
'packages.base.translator.changelang.type' => 'complete', //short, complete
@hostname : با استفاده از ایندکس @hostname میتوانیم دامین url را تغییر دهیم در صورتی که @hostname تعریف نشده باشد دامین پروژه ای که در آن هستیم در نظر گرفته میشود در صورتی که میخواهیم @hostname به عنوان دامین قرار گیرد باید به آرگومان سوم تابع base\url() مقدار ture بدهیم; در صورتی که آرگومان سوم مقدار false داشته باشد @hostname به ادامهی url اضافه میشود.
@encode : برای تعیین کردن Encoding صفحه استفاده میشود.
نکته : آرگومان های تابع base\url() اختیاری هستند; در صورتی که به تابع آرگومانی ارسال نشود ادرس صفحه اصلی را برمیگرداند.
نکته : زمانی که از تابع
packages\base\url
برای ادرس دهی صفحات استفاده میشود ، بهصورت خودکار زبان فعال را در آدرس قرار میدهد .
برای اطلاعات بیشتر به صفحه مترجم مراجعه کنید.
مثال 1 :
<?php
use packages\base;
?>
<!DOCTYPE html>
<html>
<body>
<h1>
<a href="<?php echo base\url(); ?>"> home page </a>
</h1>
/*output
<a href="/"> home page </a>
*/
</body>
</html>
مثال 2 :
/* نمونه فایل config.php
'packages.base.translator.defaultlang' => 'fa_IR',
'packages.base.translator.changelang' => 'uri',
'packages.base.translator.changelang.type' => 'short'
*/
<?php
use packages\base;
?>
<!DOCTYPE html>
<html>
<body>
<h1>
<a href="<?php echo base\url('about-us'); ?>"> about us </a>
</h1>
/*output
<a href="/fa/about-us"> about us </a>
*/
</body>
</html>
مثال 3 :
/* نمونه فایل config.php
'packages.base.translator.defaultlang' => 'fa_IR',
'packages.base.translator.changelang' => 'uri',
'packages.base.translator.changelang.type' => 'short'
*/
<?php
use packages\base;
?>
<!DOCTYPE html>
<html>
<body>
<h1>
<a href='<?php echo base\url("about-us", ["@hostname" => "test.com", "@lang" => "en", "key" => "value", "key2" => "value2"], true); ?>'> about us </a>
</h1>
/*output
<a href="http://test.com/en/about-us?key=value&key2=value2"> about us </a>
*/
<h1>
<a href='<?php echo base\url("about-us", ["@hostname" => "test.com", "@lang" => "en"]); ?>'> about us </a>
</h1>
/*output
<a href="/en/about-us?%40hostname=test.com"> about us </a>
*/
</body>
</html>