Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [IE] Błędy w wyświetlaniu szablonu oraz generowaniu linków
Forum PHP.pl > Forum > Po stronie przeglądarki
Asmox
Mam aplikację w php, która działa typowo wg. mvc. Pod koniec działania generuje zawartość strony oraz ładuje szablon. Niestety w IE coś z nim jest nie tak. Pierwsza rzecz jaka rzuca się w oczy to rozciągnięcie głównego kontenera (div na tekst artykułów itd) na całą stronę tak, że menu spada pod spód zamiast być ustawione obok. Są też inne błędy takie jak brak zaokrąglenia rogów, które w 9. wersji już jest zaimplementowane oraz jeszcze jedna dziwna rzecz:
we wszystkich przeglądarkach wszystkie linki działają normalnie natomiast w IE część linka odpowiadająca za aplikację (linki generuję takie, że jest np. <a href="tag/5">) dorzuca się na końcu adresu zamiast zastępować poprzedniej. Czyli jak np. ze strony głównej kliknę link [tag 5] z adresem tag/5, a na tamtej stronie kliknę [index tagów] z adresem tag/index, to wczytuje mi tag/tag/index
Zupełnie nie wiem dlaczego tak się dzieje, szablon kopiowałem do zwykłego htmla metodą kopiuj-wklej z podglądu źródła, zadziwiające jest to że np. raz potrafi działać (że layout wyświetla się prawidłowo bez problemów) a raz że się rozwali tak jak mam na swojej stronie. Czy ktoś ma może pomysł o co z tym może chodzić?
ShadowD
1. Jestem jasnowidzem i wyczarowałem, że masz zły css
2. W linkach dodaj / na początku lub meta base
3. POKAŻ DO JASNEJ CIASNEJ TO NA ŻYWO!

Tyle razy się prosi o pokazywanie kłopotów z html/css/js na żywych przykładach, że się płakać chce jak się czyta takie posty jak Twój, przepraszam ale na prawdę nie mamy kul lub monitorów wróżących z prądu by Ci pomóc, a ewidentnie coś skopciłeś w html'u i css'ie. Dodając przykład o kilka osób więcej Ci pomoże, zazwyczaj użytkownicy mający coś ciekawego do powiedzenia nie piszą postów z prośbą o live, a raportują temat.
Asmox
Przepraszam, już wstawiam.
Plik szablonu, który po przekopiowaniu i zrobieniu zwykłego htmla (z podglądu źródła) potrafił dobrze działać
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <base href="http://localhost/aph/" />
  5. <?php $this->insertCSS('css/reset.css'); ?> <!-- arkusz resetujący -->
  6. <?php $this->insertCSS('css/znaczniki.css'); ?> <!--formatowanie podstawowych znaczników-->
  7. <?php $this->insertCSS('css/kolory_i_style.css'); ?> <!--ten arkusz buduje układ strony-->
  8. <?php $this->insertCSS('css/menu.css'); ?> <!--tu są bardziej konkretne style dla menu-->
  9. <title><?php $this->printField('tytul'); ?> :: Asmox Personal Homepage</title>
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  11. </head>
  12. <body>
  13. <div id="main_wrap"> <!--glowny kontener na strone-->
  14. <div id="header"> <!--nagłówek składa się z 3 elementów, skrajny lewy i prawy mają części logo, środkowy ma pasek który dostosowuje się w zależności od wymiarów strony-->
  15. <div id="header-left"></div><div id="header-right"></div>
  16. </div>
  17. <div id="board"> <!--ten element to pojemnik na zawartość oraz menu-->
  18. <div id="content"><?php $this->printField('glowny_kontener'); ?></div> <!--kontener na treść-->
  19. <div id="rpanel"> <!-- kontener na menu, w sumie po przeróbce ostatniego szablonu zapomniałem zmienić nazwy -->
  20. <div class="caption">Menu</div> <!--nagłówek menu-->
  21. <?php
  22. // Wypisanie zawartości menu
  23. $this->printField('menu');
  24.  
  25. // Sprawdzanie, czy są tagi i ich ewentualne wypisanie
  26. if ($this->checkField('tagi')) {
  27. echo '<div class="caption"><span>Tagi</span></div>';
  28. $this->printField('tagi');
  29. }
  30. ?>
  31. <!--nagłówek kontrolny-->
  32. <div class="caption">12345678</div>
  33. </div>
  34. </div>
  35. </div>
  36. </body>
  37. </html>


Dobrze, teraz kolory_i_style.css, ale ja go sprawdzałem na tym przekopiowanym szablonie i było ok:
Kod
body {
    background-color: #1a1a1a;
}

div#main_wrap {
    min-width: 970px;
    max-width: 1200px;
    margin: auto;
    margin-top: 20px;
    width: expression(document.body.clientWidth > 1200 ? "1200px" : "auto");
}

div#header, div#header-left, div#header-right {
    height: 150px;
}

div#header {
    background-image: url(../img/naglowek-center.png);
    background-repeat: repeat-x;
    margin-bottom: 50px;
    width: 100%;
}

div#header-left {
    background-image: url(../img/naglowek-left.png);
    width: 480px;
    float: left;
}

div#header-right {
    background-image: url(../img/naglowek-right.png);
    width: 480px;
    float: right;
}

div#board {
    display: table;
    width: 100%;
}

div#board div#content, div#board div#rpanel {
    display: table-cell;
}

div#board div#content {
    background-color: #101010;
    border: 6px solid #aaeeff;
    color: #f9f9f9;
    padding: .5em 1em;
    -khtml-border-radius:20px;
    -moz-border-radius:20px;
    -icab-border-radius:20px;
    -webkit-border-radius:20px;
    border-radius:20px;
}

div#board div#rpanel {
    padding-left: 10px;
    width: 200px;
    vertical-align: top;
}


W skopiowanym do htmla szablonie w IE działały zaokrąglone, a na stronie nie chcą.
Lista tagów w menu jest robiona przez poniższą funkcję:
  1. $tagi = tagKontroler::pobierzNazwyTagowDlaObiektu($id, $typ); // Zwraca tablicę tagów ([id_taga] => nazwa_taga), które są powiązane z id obiektu danego typu, przykładowe wykorzystanie to tagKontroler::pobierzNazwyTagowDlaObiektu(3, 'page');
  2. if (empty ($tagi))
  3. return null;
  4. $lista = '<ul>';
  5. foreach ($tagi as $idTaga => $nazwaTaga) {
  6. $lista.= '<li><a href="tag/'.$idTaga.'">'.$nazwaTaga.'</a></li>';
  7. }
  8. $lista .= '</ul>';
  9. return $lista;
ShadowD
I teraz pytanie czy ktoś to skopiuje i zapisze czy nie, na prawdę chciał bym pomóc, ale jeśli nie dostanę linka do pracy lub jakiegoś serwisu do testowania kodu nie zrobię tego. ;-)
Asmox
W sumie już znalazłem rozwiązanie - w kodzie php było wiele instrukcji print_r, które pomagały mi wypisując niektóre pomocne rzeczy. Natomiast nie wiem dlaczego przez to IE przestał normalnie ładować stronę. Skasowałem print_r-y i wszystko jest ok. Więc w sumie mam takie pytanie czysto teoretyczne, czy takie wypisywanie rzeczy przed kodem html niszczy całą strukturę?
by_ikar
Cytat(Asmox @ 30.01.2012, 20:32:04 ) *
W sumie już znalazłem rozwiązanie - w kodzie php było wiele instrukcji print_r, które pomagały mi wypisując niektóre pomocne rzeczy. Natomiast nie wiem dlaczego przez to IE przestał normalnie ładować stronę. Skasowałem print_r-y i wszystko jest ok. Więc w sumie mam takie pytanie czysto teoretyczne, czy takie wypisywanie rzeczy przed kodem html niszczy całą strukturę?


print_r ma drugi parametr, w którym dajesz true, dzięki czemu takie dane nie wyświetlają się gdzie popadnie. Druga sprawa to jest taka że w normalnych przeglądarkach będzie działać poprawnie, w badzIEwiu niestety więcej rzeczy czasami nie działa niż działa..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.