دریافت تنظیمات مودل به ازای هر زیر دامنه در قالب essential

فرض کنید شما سیستم آموزش مجازی برای یک واحد آموزش فناوری اطلاعات راه اندازی کرده اید. این واحد دارای دپارتمان آموزش شبکه و آموزش برنامه نویسی می باشد. برای اینکه دانشجوی هر واحد در صفحه اول خود اسلاید شو و همچنین Marketing spots مربوط به درس خود را ببیند باید به ازای هر subdomain تنظیمات خاص خود را دریافت کند و همچنین نیاز به نصب Moodle جداگانه برای هر دپارتمان نباشد باید تغییراتی را در قالب ایجاد کرد.
در این مطلب نحوه این تغییرات را بر روی قالب essential نسخه 20140203 را مرور می کنیم.
 

بهترین مقدار برای جداسازی تغییرات استفاده از آدرس دامنه می باشد.البته این آدرس را باید پس از دریافت تصحیح و در داخل یک متغیر (به طور مثال myPostFix$ ) نگهداری نماییم.

<?php
   $myPostFix = $_SERVER['HTTP_HOST'];
    $myPostFix = str_replace(str_split(".-_"), '', $myPostFix);
?>

 

حال باید در چند فایل این مقدار را جایگزاری نماییم.

1- در فایل settings.php

   -اسلایدشو

اضافه کردن myPostFix$ به toggle slideshow (تنظیم نحوه نمایش اسلایدشو)
به طور مثال:

$name = 'theme_essential/toggleslideshow'.$myPostFix;

اضافه کردن مقدار $myPostFix به مقادیر فیلدهای اسلایدشو
به طور مثال:

$name = 'theme_essential/slide1info{$myPostfix}';
//Title
$name = 'theme_essential/slide1{$myPostfix}';
//Image
$name = 'theme_essential/slide1image{$myPostfix}';
$setting = new admin_setting_configstoredfile($name, $title, $description, slide1image{$myPostfix});
 // Caption.
$name = 'theme_essential/slide1caption{$myPostfix}';
//// URL.
$name = 'theme_essential/slide1url{$myPostfix}';

   - Marketing spots

اضافه کردن myPostFix$ به togglemarketing (تنظیم نحوه نمایش Marketing spots)

$name = 'theme_essential/togglemarketing'.$myPostFix;

اضافه کردن مقدار $myPostFix به Marketing hright:

$name = "theme_essential/marketingheight{$myPostFix}";

اضافه کردن مقدار $myPostFix به مقادیر فیلدهای Marketing spot
به طور مثال:

//This is the descriptor for Marketing Spot One
$name = 'theme_essential/marketing1info'.$myPostFix;
//Marketing Spot One.
$name = 'theme_essential/marketing1'.$myPostFix;
//Icon
$name = 'theme_essential/marketing1icon'.$myPostFix;
//Image
$name = 'theme_essential/marketing1image'.$myPostFix;
$setting=new admin_setting_configstoredfile($name,$title,$description,('marketing1image'.$myPostFix));
//Content
$name = 'theme_essential/marketing1content'.$myPostFix;
//button Text
$name = 'theme_essential/marketing1buttontext'.$myPostFix;
//button URL
$name = 'theme_essential/marketing1buttonurl'.$myPostFix;

2- در فایل layout/frontpage.php

  
استفاده از $myPostfix در مقدار دهی به $hasslide ها.

$hasslide1 = (!empty($PAGE->theme->settings->{slide1.$myPostFix}));
$hasslide1image = (!empty($PAGE->theme->settings->{slide1image.$myPostFix}));
$hasslide1caption = (!empty($PAGE->theme->settings->{slide1caption.$myPostFix}));
$hasslide1url = (!empty($PAGE->theme->settings->{slide1url.$myPostFix}));

و همچنین در:

if ($hasslide1) {
    $slide1 = $PAGE->theme->settings->{slide1.$myPostFix};
}
if ($hasslide1image) {
 $slide1image=$PAGE->theme->setting_file_url("slide1image{$myPostFix}", "slide1image{$myPostFix}");
}
if ($hasslide1caption) {
    $slide1caption = $PAGE->theme->settings->{slide1caption.$myPostFix};
}
if ($hasslide1url) {
    $slide1url = $PAGE->theme->settings->{slide1url.$myPostFix};
}

اضافه کردن myPostFix$ در toggleslideshow:

if($PAGE->theme->settings->{toggleslideshow.$myPostFix}==1) {
   require_once(dirname(__FILE__).'/includes/slideshow_'. ($PAGE->theme->settings->slideshowvariant) .'.php');
} else if($PAGE->theme->settings->{toggleslideshow.$myPostFix}==2 && !isloggedin()) {
   require_once(dirname(__FILE__).'/includes/slideshow_'. ($PAGE->theme->settings->slideshowvariant) .'.php');
} else if($PAGE->theme->settings->{toggleslideshow.$myPostFix}==3 && isloggedin()) {
   require_once(dirname(__FILE__).'/includes/slideshow_'. ($PAGE->theme->settings->slideshowvariant) .'.php');
}

   -Marketign spots
اضافه کردن myPostFix$ به hasmarketingimage :

$hasmarketing1image = (!empty($PAGE->theme->settings->{marketing1image.$myPostFix}));

3- در فایل lib.php

   -اسلاید شو

اضافه کردن myPostFix$ در تابع ()theme_essential_process_css برای ارجاع دادن آدرس عکس های اسلاید شو ، به عنوان مثال:

$setting = 'slide1image'.$myPostFix;
    if (!empty($theme->settings->{slide1image.$myPostFix})) {
        $slideimage = $theme->setting_file_url($setting, $setting);
    }

   -Marketing spots

اضافه کردن myPostFix$ برای marketing height در تابع ()theme_essential_process_css که مقدار ارتفاع عکس ها را در فایل CSS تنظیم می نماید

if (!empty($theme->settings->{marketingheight.$myPostFix})) {
        $marketingheight = $theme->settings->{marketingheight.$myPostFix};
    }

اضافه کردن myPostFix$ در تابع ()theme_essential_process_css برای ارجاع آدرس عکس های Marketing spots و تنظیم آن در CSS ، به عنوان مثال:

$setting = 'marketing1image'.$myPostFix;
$marketing1image = 'marketing1image'.$myPostFix;

 

در فایل layout/includes/marketingspots.php ( فقط جهت Marketing spots )

برای تنظیمات متفاوت به ازای هر زیر دامنه در Marketing spot ها می بایست در فایل layout/includes/marketingspots.php نیز تغییراتی را اعمال نمایید.
قبل از اینکه $myPostFix را اضافه کنیم لازم می دانم دو نکته در مورد Marketingspots ها را بیان کنم:

 1- علت اینکه تابع تنظیم کننده مقدار ارتفاع انتخاب شده marketing spots ها (تابع ()theme_essential_set_marketingheight در فایل lib.php) عدد انتخاب شده را به طور صحیح بازنمی گرداند ابتدا این مورد را مرتفع نماییم:

$myMaketingHeight = $PAGE->theme->settings->{marketingheight.$myPostFix};
if (is_null($myMaketingHeight)) {
        $myMaketingHeight = '100';
    }else{
    switch($myMaketingHeight){
        case'0':
            $myMaketingHeight = '50';
            break;
        case'1':
            $myMaketingHeight = '100';
            break;
        case'2':
            $myMaketingHeight = '150';
            break;
        case'3':
            $myMaketingHeight = '200';
            break;
        case'4':
            $myMaketingHeight = '250';
            break;
        case'5':
            $myMaketingHeight = '300';
            break;
    }
}


 2- به علت اینکه تصاویر marketingspots و همچنین مقدار ارتفاع آن به صورت یک کلاس CSS فراخوانی می شود و چون فایل های CSS در مودل Cache می شوند باید این مقادیر را به صورت inline فراخوانی نمود.(مانند خط 3 مثال آخر)

حال مقدار myPostFix$‌ را مانند مثال به هر یک از marketing spot ها اضافه میکنیم:

<h5><span><i class="fa fa-<?php echo $PAGE->theme->settings->{marketing1icon.$myPostFix} ?>"></i> <?php echo $PAGE->theme->settings->{marketing1.$myPostFix} ?></span></h5>
<?php if ($hasmarketing1image) { ?>
<div‌ class="marketing-image1" style="background: url('<?php echo $PAGE->theme->setting_file_url("marketing1image{$myPostFix}", "marketing1image{$myPostFix}"); ?>') no-repeat scroll 0 0 rgba(0, 0, 0, 0); height: <?php echo $myMaketingHeight.'px'; ?>"></div>
<?php } ?>
<?php echo $PAGE->theme->settings->{marketing1content.$myPostFix} ?>
 <p align="right"><a href="<?php echo $PAGE->theme->settings->{marketing1buttonurl.$myPostFix} ?>" id="button"><?php echo $PAGE->theme->settings->{marketing1buttontext.$myPostFix} ?></a></p>

افزودن نظر جدید