Wybór pliku css

0

Musze napisać wersję mobilną strony przy pomocy PHP. Nie znam kompletnie języka i dlatego proszę o pomoc.
Strona ma automatycznie zmieniać wygląd z desktop/mobilna w zależności od urządzenia na którym została uruchomiona. Mam już funkcję sprawdzająca jakie to urządzenie i zwraca napis "mobile" lub "desktop".
Problem polega na tym że nie wiem jak to dobrze zrobić. Mój pomysł jest taki aby sprawdzać jaki to typ i w zależności wybierać plik css oddzielny dla wersji desktop i oddzielny dla mobilnej.

Jak to zaimplementować? Czy da radę w HTML?

Najlepiej było by gdyby nadał id link'owi dodającego css dla każdej podstrony identyczny i aby w jednej funkcji podmieniło ścieżki do css.
Czy da radę coś takiego zrobić? Lub może inne dobre pomysły

Z góry dziękuje

0

Możesz plik css podzielić na sekcje:

@media screen
....
@media handheld
....
0

Niestety nie mogę. To jest na zaliczenie i muszę użyć PHP

Zrobiłem coś takiego

 
<?php
    $stylesheet = getBrowserType();
    switch($stylesheet) {
        case 'mobile':
            $style = 'mobilna.css_';
            break;
        default:
            $style = 'default.css';
            break;
    }

    $sc = '<link rel="stylesheet" type="text/css" href="' . $style . '">';
echo $sc;
?>
 

Ale mam problem z wypisaniem bo wywala mi cały czas 0. Ustaliłem że to wina znaku '<' w "$sc = '<link rel .... ". Jak to mogę naprawić?

0

wywala mi cały czas 0 - wyjaśnij. gdzie?

0

Jeśli uruchomię ten plik powinienem uzyskać tekst:

<link rel="stylesheet" type="text/css" href="plik.css">

gdyż mam linikję

    $sc = '<link rel="stylesheet" type="text/css" href="' . $style . '">';
    echo $sc;
 

niestety po wywołaniu mam wynik "0", jeśli natomiast usunę pierwszą klamrę "<" czyli kod wygląda następująco:

 
    $sc = 'link rel="stylesheet" type="text/css" href="' . $style . '">';
    echo $sc;

to wyświetla prawie dobrze, gdyż bez pierwszej klamry.

Oczywiście główny problem pozostaje nie rozwiązany bo nie mam pojęcia jak ten wynik wstawić do HTML.

0

Musisz stworzyć podstawowy szkielet HTML i w head wrzucić po prostu kod PHP. No i nie przypisuj nic do zmiennej, zrób od razu

echo "<link rel='stylesheet' type='text/css' href='$style'>";

Możesz sobie tą zmienną $style wydzielić tak jak robiłeś, będzie wtedy bardziej widoczna, ale w ten sposób też zadziała.

0

Niestety tak też źle wypisywało, od tego zacząłem. Próbowałem też łączyć to w różne sposoby za pomocą "." i "+" ale nie przyniosło to oczekiwanych rezultatów.

A co do umieszczenia kodu w head to nie mam pojęcia jak. Jeśli umieszcze tak:

 
<?php include("plik.php"); ?>

to nie działa. Próbowałem też w body ale działa to tylko wtedy gdy plik ma także rozszerzenie php zamiast HTML. Funkcję sprawdzającą muszę mieć w oddzielnym pliku więc muszę go ewentualnie jakoś wstawić do html ale jak na razie nie przynosi to oczekiwanych rezultatów.

1

Nie chcę być niemiły, ale masz zaliczenie z PHP + HTML, a nie znasz nawet podstaw korelacji tych języków. Plik musi mieć rozszerzenie .php nawet choćby zawierał 150 linii napisanych czystym HTML i 1 w PHP.
Stwórz plik php, wklep w niego standardowy szablon html, a następnie w "środek" head wrzuć kod php. To nie jest jakieś nie wiadomo co, więc nie musisz raczej robić 2 oddzielnych plików. Chyba, że taka jest specyfikacja zadania, wtedy dorzuć tego include, ale bez żadnych nawiasów

<?php include "plik.php"; ?>
0

Niestety muszę się przyznać, za bardzo nie czytałem o php. Wiem jednak że działa to tak jak mówisz ale liczyłem, że można to zrobić inaczej z tego powodu iż mam dużo plików html i musiał bym wszystkie przerabiać i dodawać plik php żeby każdą stronę mógł wyświetlić w dwóch wersjach. W zadaniu jest także ograniczenie do dwóch plików php więc odpada tworzenie plików php dla każdej podstrony.

0

problem jest taki, że przedstawiony przez Ciebie skrypt działa dobrze.
http://i.imgur.com/24flEKu.png

jeżeli masz gdzieś zero to próbujesz łączyć stringi plusem (+).

ciężko powiedzieć gdzie, skoro jedyny zacytowany kod jest poprawny,

0
faayzol napisał(a):

(...) mam dużo plików html i musiał bym wszystkie przerabiać i dodawać plik php żeby każdą stronę mógł wyświetlić w dwóch wersjach. W zadaniu jest także ograniczenie do dwóch plików php więc odpada tworzenie plików php dla każdej podstrony.

Co ty tak dokładnie masz zrobić w tym zadaniu? O co chodzi z tym limitem? Bo jeśli musisz na każdej podstronie sprawdzić czy urządzenie jest mobilne, to siłą rzeczy plik musi mieć kod php (wg. twoich założeń).
W 1 poście napisałeś:

faayzol napisał(a):

(...) Jak to zaimplementować? Czy da radę w HTML?

Potem jednak stwierdziłeś, że to musi być rozwiązane za pomocą php. Może jednak niekoniecznie? Może php owszem, ale do czego innego, a to możesz zrobić w jakiś inny sposób. Co prawda rozwiązanie z php było by najbardziej uniwersalne z racji, że nie wszystkie smartphone'y tolerują atrybut media.
Można to zrobić też prostym js:

<link id="stylesheet" rel="stylesheet" href="style1.css">
<script>
if( is_mobile() ) 
{
 document.getElementsByTagName('link').item(0).href="style2.css";
//albo
 document.getElementById('stylesheet').href="style2.css";
}
</script>

Jest jeszcze kilka innych rozwiązań, np. z użyciem ciasteczek (żeby za każdym razem nie sprawdzać), stworzenie osobnego szablonu dla urządzeń mobilnych i przekierowywanie na niego (to w zasadzie to samo, co podmiana stylu), możesz nawet zrobić przekierowanie w .htaccess (dość niewygodna metoda, ale zadziała).

0

Dzięki wszystkim za pomoc, już sobie poradziłem ale wprowadzę sprostowanie.

Okazało się, że tylko strona główna ma być wyświetlana w dwóch wersjach. W założeniu zadania nie mogłem zmieniać poprzednich plików które napisałem w HTML ewentualnie kilka linijek kodu ale bez zmiany rozszerzenia. Kolejnym ograniczeniem była ilość plików php.

Bałem się o to że dla każdej podstrony będę musiał kopiować ją znów i przerabiać na wersję mobilną ale w moim przypadku była to tylko zmiana stylu css. Więc to trochę źle bo zmiany musiał bym wprowadzać w obu plikach.

Na szczęście musiałem tylko stronę główną więc skopiowałem, ją i napisałem index.php, który jest prawi identyczny jak wklejony powyżej kod ale nie wypisuje echo tylko odsyła do odpowiedniej strony.

Dzięki jeszcze raz za pomoc :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1