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ında

Firefox, 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

Fayla gedən yol Fayl fayl üçün göstərilən yola uyğun olaraq bağlanır. İki yol variantı var: nisbi və mütləq. Nisbi - bu, əlaqə təlimatları olan fayla nisbətən bağlı fayla gedən yolun göstəricisidir. Mütləq - daxil edilmiş faylın tam yolunu təyin etmək.

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

daxildir və include_onceinclude() PHP skriptinin icrası zamanı faylları PHP skript koduna daxil etmək üçün nəzərdə tutulmuş konstruksiyalardır. Kodu emal edərkən təlimat əlavə edilmiş faylın məzmunu ilə əvəz olunur. Dərhal bir nümunəyə baxmağı təklif edirəm.

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

tələb və tələb_bir dəfə tələb və tələb_bir dəfə tələb etmə təlimatları yalnız bir xüsusiyyət istisna olmaqla, bir dəfə daxil etmək və daxil etmək üçün eyni işləyir - daxil edilmiş fayl tapılmadıqda, skriptin icrası dayandırılacaq (skript artıq oxunmayacaq), sadəcə olaraq daxil et və bir dəfə daxil et xəbərdarlığı çap edin və skriptin sonrakı icrasına davam edin.Əgər daxil edin və ya tələb işləmirsə, Daxil etməyin niyə işləməməsinin səbəblərini başa düşmək üçün hər şeyi addım-addım yoxlamağı təklif edirəm. Aşağıdakı məqamlar nə qədər aydın və səthi olsa da, hər şeyi əvvəldən yoxlayın

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.