PDA

Zobacz pełną wersję : [Rozwiązane] Zmiana strony startowej przy ponownych odwiedzinach



aniaaina
13-05-2019, 01:55
Dzień dobry!

Chciałabym prosić o radę. Buduję stronę na najnowszej joomli. Chciałabym, aby użytkownik przy pierwszych odwiedzinach witryny został skierowany na stronę główną, a przy kolejnej i każdej następnej wizycie po wpisaniu głównej domeny został przekierowany na podstronę. Pytałam dostawcę hostingu, jednak polecił mi szukać rozwiązania w joomla lub "czysto programistycznego". Czy ktoś z Was ma może pomysł, jak uzyskać taki efekt? Będę wdzięczna za wszelkie wskazówki.

siristru
13-05-2019, 08:15
To jest możliwe przy wykorzystaniu ciasteczek. Jednak jeśli użytkownik skorzysta z innej przeglądarki lub oczyści historię przeglądania i pamięć podręczną lub ciasteczko straci ważność - proces się powtórzy czyli zobaczy stronę główną a przy następnej wizycie dopiero podstronę.

Sprawdź to: https://stackoverflow.com/questions/7373452/set-cookie-to-redirect-if-page-has-already-been-visited

aniaaina
13-05-2019, 17:24
Dziękuję, dokładnie o to mi chodzi! Jednak nie jestem sobie w stanie poradzić z tym kodem. Wiem jedynie, gdzie go wkleić :wstyd: Czy mogę prosić o pomoc w jego dostosowaniu?

siristru
13-05-2019, 17:57
Jasne, chętnie pomogę.
Daj mi chwilę by przetestować to na swoim serwerze.
Jak opracuję gotową metodę to napisze instrukcję.

Zapisuję to sobie na liście TODO.

siristru
13-05-2019, 20:06
Dobra, to idzie tak:

0. Założenia: musisz posiadać jQuery. Z reguły Joomla domyślnie ładuje jQuery ale warto się upewnić czy tak jest faktycznie przeglądając kod strony (głównej wystarczy).

1. Pobierasz wtyczkę stąd: https://github.com/carhartl/jquery-cookie

Pobierz ZIP: http://prntscr.com/no1yev

2. Rozpakuj u siebie na dysku.

3. Skopiuj plik jquery.cookie.js z /jquery-cookie-master/src do swojego szablonu na serwerze ROOT/templates/<nazwa-szablonu>/js (jeśli nie masz tego katalogu to go utwórz)

4. Edytuj plik index.php w ROOT/templates/<nazwa-szablonu>

5. Odszukaj kod:


<jdoc:include type="head" />

Pod nim dodaj:


<script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/js/jquery.cookie.js"></script>
<?php
$host = $_SERVER['REQUEST_URI'];
if($host == "/") {
?>
<script type="text/javascript">
jQuery(function() {
var COOKIE_NAME = 'returning-cookie';
$go = jQuery.cookie(COOKIE_NAME);
if ($go == null) {
jQuery.cookie(COOKIE_NAME, 'test', { path: '/', expires: 6 });
}
if ($go != null) {
window.location = "/news.html"
}
});
</script>
<?php } ?>

W taki sposób: http://prntscr.com/no22ak

Wyjaśnienia kodu

1. Ten kawałek ładuje wtyczkę http://prntscr.com/no22q7

2. Ten kawałek:


<?php
$host = $_SERVER['REQUEST_URI'];
if($host == "/") {
?>

To warunek sprawdzający czy jesteśmy na stronie głównej, bo chcemy by skrypt wykonywał się TYLKO na stronie głównej... w innym wypadku będzie nas przekierowywać w nieskończoność.

2. Ten kawałek określa nazwę ciasteczka:


var COOKIE_NAME = 'returning-cookie';

Tekst returning-cookie możesz zmienić na inny byleby nie miał spacji i znaków diakrytycznych.

3. Ten kawałek to znowu warunek w js sprawdzający czy zmienna $go zawiera wartość null czyli jest pusta


if ($go == null) {
jQuery.cookie(COOKIE_NAME, 'test', { path: '/', expires: 6 });
}

jeśli jest pusta tworzy ciasteczko z zawartością test i ważna na 6 dni. Możesz zmienić test na dowolna wartość ale bez znaków diakrytycznych. Tak samo 6 możesz zmienić na 365. Po roku ciasteczko straci ważność i użytkownik zostanie potraktowany jak nowy, nie powracający.

4. Ten kawałek sprawdza czy wartość zmiennej $go jest różna od null czyli nie jest pusta:


if ($go != null) {
window.location = "/news.html"
}

jeśli nie jest to przekierowuje do lokalizacji /news.html. Możesz zmienić wartość "/news.html" na inną ale pamiętaj o początkowym slashu.

Ograniczenia

Należy pamiętać, że niektórzy wyłączając obsługę cookies w przeglądarce, usuwają cookies lub zmieniają przeglądarkę. W takiej sytuacji kod nie zadziała (brak obsługi cookie) lub potraktuje odwiedzającego jako nowego i wyświetli stronę startową a za kolejnym razem już przekieruje. Cookie musi mieć datę ważności (nie może być bezterminowe - patrz persistent cookie).

Po utworzeniu ciasteczka przekierowanie będzie wcią ż działało więc np. jeśli ma się w menu pozycję dla pierwszej strony np. HOME to klikajac na nie... zostaniemy zawróceni na stronę docelową... nie da sie wyświetlic już strony HOME bez usunięcia ciasteczka.

Skrypt jest wykonywany zaraz po załadowaniu części strony z kodem więc strona startowa może "mignąć" więc jakiś preload może się przydać do jej spowolnienia.

Przykład

http://siristru.prolusatia.pl

1. Wejdź na stronę

Zostanie załadowana strona startowa "home"

2. Odśwież stronę

Nastąpi przekierowanie do zakładki "News"

terra
13-05-2019, 21:16
Nie wiem co masz na celu, ale myślę, że dużo lepsze jest rozwiązanie mieszania zawartości na stronie startowej niż zmiana przekierowań.

siristru
13-05-2019, 22:08
A! Jest jeszcze inna opcja tzw. splash screen... czyli wchodzę na stronę i po jakiejś chwili pokazuje mi się a'la lightbox jakaś informacja. Tak jak na forum okienko z fan page na FB.

aniaaina
17-05-2019, 01:04
Siristru, fantastyczna instrukcja! Dokładnie o to mi chodziło! Działa doskonale, dziękuję! :)
Tylko teraz jeszcze jedno pytanie. W tej chwili użytkownik jest przekierowany ze strony głównej do zakładki - pięknie. A czy jest możliwość, że będąc w tej pozycji zdecyduje, że chce odwiedzić stronę główną, to będzie mógł się na nią dostać? W takim układzie strona główna jest całkowicie zablokowana.

Chodzi o to, że mam stronę, której sercem jest wyszukiwarka znajdująca się w zakładce. Na stronie głównej mam kilka informacji "organizacyjnych", ale wierzę, że przyszły użytkownik będzie korzystał przede wszystkim z wyszukiwarki, stąd przekierowanie. Nie chcę jednak całkowicie zablokować dostępu do strony głównej.

Czy można dodać taki warunek do kodu?
Jeszcze raz dziękuję za profesjonalną pomoc!

siristru
17-05-2019, 01:24
Er... nie. Nie da się takiego warunku utworzyć bo to zaprzeczenie tego co warunek sprawdza.
Ale możesz zrobić tak:

- strona startowa (pierwsze wejście na stronę) daje się zobaczyć a tworzone jest ciasteczko
- strona ta nie powinna być dostępna w menu jako pozycja menu (można ja ukryć np. dzięki CSS)
- po ponownej wizycie sprawdzane jest ciasteczko i przekierowuje wracającego odwiedzającego do konkretnej zakładki
- by strona startowa była widoczna musisz ją zdublować czyli utworzyć bliźniaczą, z takimi samymi ustawieniami i modułami etc
- strona ta (pozycja w menu) będzie widoczna w menu (różnica między nią a ta prawdziwą startową jest taka, że ta druga startowa będzie miała alias, czyli nie cofnie do domeny tylko np. moja-domena.pl/start.html

aniaaina
17-05-2019, 10:01
Sprytne. Wszystko działa, dokładnie jak powinno. Siristru, dziękuję za pomoc!