IE-nin köhnə versiyalarında giriş üçün tələb olunan atributun işləməsini necə təmin etmək olar? Siniflərdən fayl tələb edərkən bir dəfə tələb düzgün işləmir Bir dəfə tələb işləmir
Hər hansı bir veb tərtibatçısı üçün hazırda məhsulunun tam cross-brauzer uyğunluğundan daha ciddi problem yoxdur. Bu, yəqin ki, yaxşı mütəxəssisin əsas vəzifələrindən biridir: onun veb-saytının həmişə bütün brauzerlərdə düzgün göstərilməsini təmin etmək.
Bəzən giriş üçün istifadə olunan tələb olunan parametr qədim IE-də işləmir, sadəcə olaraq belə buraxıla bilməz. Hələ də IE6-dan istifadə edən təqaüdçü istifadəçilər Google Chrome-un ən son versiyasının istifadəçiləri kimi saytınızla eyni istifadə rahatlığına malik olmalıdırlar. Veb tərtibatçılarından başqa kim onlara qayğı göstərə bilər.
Ağrılı nöqtə haqqında, Internet Explorer haqqındaFirefox, Opera və Google Chrome daxil olan adi brauzerlər üçün bu tapşırıq nisbətən asandır. Bu brauzerlərin hətta köhnə versiyaları, əlbəttə ki, bəzi yeni texnologiyalardan istifadə edilmədiyi halda, HTML kodunu eyni dərəcədə yaxşı göstərir. Ancaq Internet Explorer ailəsinin brauzerlərində buna nail olmaq üçün sadəcə Herculean səyləri tələb olunur.
Internet Explorer brauzerinin hər bir versiyasının özünəməxsus axmaqlığı var. IE6-da işləyən IE7-də düzgün işləməyə bilər və əksinə. Microsoft hətta brauzerinin ən son versiyasında belə bu zooparkın öhdəsindən gələ bilmədi.
Brauzer tərtibatçılarının veb sayt qurmaq üçün W3C standartlarını niyə açıb oxuya bilmədiyini başa düşə bilmirəm.
Buna görə də, bir veb tərtibatçısı olaraq, bilik və tamaşa tələb edən şıltaq brauzerlər və sayt ziyarətçiləri arasında bir növ "qat" rolunu oynamalıyam. Veb tərtibatçılarının indiyə qədər bunu bacarması çox gözəldir.
Beləliklə, IE-nin köhnə versiyalarında işləməyi necə tələb edə bilərəm?JS köməyimizə gəlir. Əvvəllər buna dözə bilmirdim, amma indi "düzgün" WEB genişliyində onsuz başqa bir yol görmürəm.
Aşağıda verilən həlli mən özüm icad etməmişəm, burjua bloqundan götürmüşəm. Mən tamahkar olduğum üçün və bloq burjua olduğu üçün ona keçid verməyəcəyəm.
fnCheckFields() funksiyası hər şeyə cavabdeh olacaq. JS kodunu saytınıza yerləşdirin:
funksiya fnCheckFields(form_obj)( var error_msg = "Bütün tələb olunan sahələri doldurun."; var is_error = false; üçün (var i = 0; form_obj_elem = form_obj.elements[i]; i++) əgər (form_obj_elem.type "giriş") || form_obj_elem.type "mətn") əgər (form_obj_elem.getAttribute("tələb olunur") && !form_obj_elem.value) səhv = doğrudur; əgər (səhvdir) xəbərdarlığı(error_msg); qaytarın !is_error; )
Adətən onu səhifənin əvvəlində HEAD html teqləri arasında yerləşdirmək tövsiyə olunur, lakin mən yenə də onu səhifənin ən aşağı hissəsində, BODY-in bağlanış teqindən əvvəl yerləşdirməyi tövsiyə edərdim. Bu yolla JS səhifə yükləmə sürətinə daha az təsir edir.
Tələb olunan parametrin daxil edilməli olduğu giriş pəncərəsi html-də belə görünməlidir:
Bu skript çox sadə işləyir: Göndər düyməsini kliklədikdən sonra skript tələb olunan parametrin olub-olmaması üçün bütün daxiletmələri yoxlayır və onu taparsa, müvafiq olaraq bu sahənin daxil edilmiş dəyərinə baxır. Belə bir girişə heç bir şey daxil edilmədikdə, girişə ehtiyac barədə xəbərdarlıq pəncərəsi göstərilir. Müvafiq olaraq, məlumatlar heç yerə göndərilmir.
Bu parametri gözlənildiyi kimi başa düşməyi öyrənmiş normal bir brauzeriniz varsa, belə bir xəbərdarlıq pəncərəsi açılmayacaq və brauzeriniz üçün tələb olunan parametri emal etmək üçün standart alətlər işləyəcək.
Sosial mediada paylaşın şəbəkələr
PHP-nin ən əyləncəli və faydalı xüsusiyyətlərindən biri başqa bir faylın daxil edilməsidir. Məsələn, veb-saytın yuxarı menyusu, aşağı menyusu və onların arasında səhifə məzmununun özü var. Və məsələn, saytın 10 səhifəsində alt menyudan istifadə olunur. Müəyyən bir nöqtədə ona dəyişikliklər etmək lazım idi. Html-də siz hər bir fərdi faylda əl ilə dəyişiklik edərdiniz, lakin php sizə saytla işi xeyli asanlaşdırmağa imkan verir! Aşağı menyunun kodu ayrıca faylda ola bilər və 10 səhifənin hər birinə sadəcə bu ayrı faylı daxil edə bilərsiniz! Yəni, indi bütün dəyişiklikləri yalnız menyu ilə fayla etmək lazımdır, digər 10-da isə dəyişikliklərlə göstəriləcək.Sadə rus dilində php-də əlaqənin mənası:
Fayl 1.php
Üst Menyu
Fayl 2.php
Aşağı menyu
Example.php faylı
1.php faylını birləşdirin
Səhifə məzmunu
2.php faylını birləşdirin
example.php faylının işlənməsi nəticəsində o, ekrana çıxacaq
Üst Menyu
Səhifə məzmunu
Aşağı menyu
Müvafiq olaraq, alt menyuda hər hansı bir şeyi dəyişdirmək üçün yalnız 2.php faylında dəyişiklik etməlisiniz
PHP kodu
// nisbi yolun nümunəsi
"include/your_file.php" daxil edin; // fayl, əlaqə faylı ilə eyni qovluqda yerləşən daxiletmə qovluğundadır
// mütləq yolun nümunəsi
$_SERVER["DOCUMENT_ROOT"] daxil edin."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] - saytın kök kataloqunu göstərir
Nümunə olaraq iki fayldan istifadə edərək includin necə işlədiyinə baxaq: index.php və text.php . İşin sadəliyi üçün onların eyni kataloqda yerləşdiyini düşünək.
PHP kodu (index.php faylı)
Echo "Əsas faylda olan düz mətn";
"text.php" daxil edin; // text.php faylının məzmununu daxil edin
?>
PHP kodu (text.php faylı)
Echo "Daxil edilmiş faylda olan mətn";
?>
index.php faylını işlətməyin nəticəsi belə olacaq:
Əsas faylda olan düz mətn
Daxil edilmiş faylda olan mətn
Həqiqətən rahatdırmı? İndi text.php faylının məzmununu dəyişdirməklə, index.php nəticəsi tamamilə fərqli olacaq!
İndi başqa bir konstruksiyadan danışaq - include_once. O, yalnız sonradan yaradılan və faylın yenidən daxil edilə bilməyəcəyi hallar üçün daxil edilən kimi işləyir. Məsələn, bir səhv nəticəsində bir faylı 2 və ya daha çox dəfə birləşdirə biləcəyinizdən qorxursunuz ki, bu da səhifənin düzgün işləməməsinə və müvafiq səhv mesajının alınmasına təsir edəcək.
PHP kodu
Bir dəfə daxil edin "text.php"; // text.php faylı yalnız bir dəfə daxil ediləcək
// aşağıdakı yenidən qoşulmalar nəzərə alınmayacaq və göstərilməyəcək
// və bu, səhv mesajının göstərilməsinə səbəb olmayacaq
bir dəfə daxil edin "text.php"; // heç nə olmayacaq
1. Serverinizin və php-nin işlək olub-olmadığını və saytda hər hansı bir php kodunun işlədiyini yoxlayın.
2. Daxil faylının olub olmadığını yoxlayın
3. Fayl adının və genişlənməsinin əlaqəyə düzgün daxil edilib-edilmədiyini yoxlayın
4. Daxil edilmiş php faylının həqiqətən göstərdiyiniz ünvanda yerləşdiyinə əmin olun
5. Nisbi yolu deyil, mütləq yolu (faylın tam yolunu) göstərməyə çalışın.
PHP kodu nümunəsi
"http://www.example.com/include/your_file.php" daxil edin;
// DOCUMENT_ROOT - resursun kök kataloqunu bildirir
$_SERVER["DOCUMENT_ROOT"] daxil edin."/include/your_file.php";
6. Əgər faylınız qoşulmursa və heç bir xəta göstərilmirsə, o zaman qoşulduğunuz faylın olduğu kataloqda aşağıdakı məzmunu olan .htaccess faylı yaradın.
Php_flag display_errors Aktivdir
və ya php faylına qoşulmazdan əvvəl aşağıdakı sətri daxil edin
Error_Reporting (E_ALL);
Hər iki parametr səhvləri göstərməyə məcbur edəcək
Diqqətinizə görə təşəkkürlər!
0
Mən kiçik bir PHP MVC çərçivəsi qururam və burada mənim strukturum var
/app /controllers /modellər /baxışlar /şablonlar /config /config.php /core /Controller.php /Router.php /init.php /index.php
qovluqlar Ön nəzarətçi olan index.php daxilində init.php /app/core/init.php-dən tələb etmək üçün bu kodum var
app/core/init.php
init.php, controller.php və router.php daxil olmaqla, /core qovluğunda hər bir əsas nəzarətçi və Classe tələb edir və burada index.php də sinifləri yaradır.
Hazırda hər şey yaxşı işləyir, çünki mən bunu həm controller.php, həm də router.php-də konstruktor yaradaraq sınaqdan keçirmişəm ki, bu iki fayldakı kod belə olacaq.
app/core/controller.php
proqram/kernel/router. php
index.php daxilində o, yaxşı əks-səda verir! çünki siniflər düzgün yaradılmışdır, lakin problem bu kodla /app/core/Controller.php-də olan Controller.php-dən /app/config/config.php-də olan config.php-ni daxil etmək istədiyim zamandır.
Hər dəfə bunu edəndə bu xətanı qaytarır
Controller::include(../config/config.php) : axını aça bilmədi: C:\AppServ\www\myapp\app\core\Controller.php-də 6-cı sətirdə belə fayl və ya kataloq yoxdur
Controller::include() : C:\AppServ\www\myapp\app\core\Controller-ə daxil etmək üçün "../config/config.php" açılmadı (include_path=".;C:\php5\pear") 6-cı sətirdə .php
Düşünürəm ki, düzgün yerdən istifadə etmişəm, /app/core/Controller.php ilə işləyirəm və /app/config/config.php tələb edir. ../ istifadə edərək bir kataloqa qayıdıram
Bəs niyə mən faylı tələb edə bilmirəm?
- 3 cavab
Çeşidləmə:
Fəaliyyət
2
Şəxsi təcrübəmə görə, nisbi fayl yollarından istifadə bir anda baş ağrısına səbəb olacaq. Mən adətən faylın tam yolundan istifadə edirəm. Bunun üstünlüyü həm də bir az daha sürətli olmasıdır. Əgər bir anda daxil etmə xətası alsanız, bütün yol əlinizdə olduğu üçün xətanı tapmaq daha asandır.
Mütləq yolları edə bilmək üçün sizə index.php (frontcontroller) faylınıza bir sabit əlavə etməyi məsləhət görərdim. Aşağıdakı kimi bir şey:
Define("ROOT_PATH", realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR);
index.php faylının yerləşdiyi qovluğa və buna görə də kök kataloqunuza istinad edən ROOT_PATH adlı sabiti müəyyən edir. Eyni zamanda yolları yazmağı asanlaşdırmaq üçün sonuna bir kataloq ayırıcı əlavə etdim.Bundan istifadə etmək üçün yazmalısınız.
Bir dəfə ROOT_PATH tələb edin. "config/config.php";
Bonus Məlumat
Amma bu yanaşmanı controller.php sinifinizdə istifadə etsəniz, onu bu sabitdən asılı edərsiniz. Bunu düzəltmək üçün konstruktorda kök yolunu dəyişən kimi ötürə bilərsiniz.
İctimai funksiya __construct($root) (...
Və sonra aşağıdakı kimi istifadə edin:
İctimai funksiya __construct($root) ( require_once($root . "config/config.php"); )
Ümid edirəm kömək edər.
0
Nə baş verdiyini bilmirəm, lakin require_once() özü daxil() kimi istinad edərkən xəta vermədi, çünki onlar fərqli funksiyalardır, üstəlik, əgər bu bütün koddursa, xəta xəttinin nömrəsi sizinlə eyni deyil require_once() xətti, çünki o, 4 olmalıdır. Veb-serverinizi yenidən işə salmağa çalışın və bunun nəyisə düzəldəcəyini yoxlayın, əks halda yəqin ki, nəsə zarafat etmiş olacaqsınız.