Ondersteuning » Code oplossingen gezocht » Cookie invoegen om user keuze te onthouden

  • michaelhastrich

    (@michaelhastrich)


    Hi,

    Ik kan geen goede oplossing vinden voor het volgende:

    Ik wil mijn posts als list of als grid (van thumbnails) weergeven (default is grid view). De bezoeker kan hiertussen switchen middels twee buttons boven aan de pagina. Nu wil ik natuurlijk dat als ik als bezoeker kies voor list view en ik terugkeer naar de overzichtspagina als ik een post bekeken heb, dat overzicht weer als list view wordt weergegeven en niet als grid (default, dus).

    Nou lijkt het me het slimst omdat middels een cookie te doen, maar…
    Hoe doe ik dat? Iemand een link naar een goede tutorial of zelf een code-snippet?

    Alle hulp is welkom.

    Thanks
    Michael

10 reacties aan het bekijken - 1 tot 10 (van in totaal 10)
  • Hallo Michael,

    Dat is redelijk eenvoudig! Ik neem aan dat je zelf aan het programmeren kunt in jouw templates of functions.

    Ik zou ervoor kiezen de gridview altijd op te roepen tenzij er dus een cookie is gezet.

    een klein voorbeeldje:

    <?php
    if($_COOKIE['list'] == "list"){
    	//toon de listversie
    }else{
    
    	//toon de gridversie
    }
    ?>

    om de cookie te zetten doe je het volgende:

    dit zijn de twee knoppen boven jouw lijst:

    <a href="jouwdomeinnaam/lijst/?list=grid" target="_self">Gridvieuw</a>
    <a href="jouwdomeinnaam/lijst/?list=list" target="_self">Listview</a>

    in dan zet je in de php het volgende:

    <?php
    
    	if($_GET['list'] == "list" && !isset($_COOKIE['list'])){
    		//we gaan de cookie zetten
    		setcookie("list", "list", time()+3600);//verloopt in 1 uur
    	}
    
    	if($_GET['list'] == "grid" && isset($_COOKIE['list'])){
    		//we gaan de cookie verwijderen
    		setcookie("list");
    	}
    ?>

    Zoiets?

    Thread starter michaelhastrich

    (@michaelhastrich)

    Hi Julian,

    Cool! Bedankt voor je antwoord.
    Idee is inderdaad dat de gridview default is, maar dat de gebruiker middels een button voor listview kan kiezen.
    Ik kom doorgaans een heel eind met zelf themes bouwen, maar dit had ik nog niet eerder geprobeerd en kon er ook net echt een duidelijke tutorial voor vinden.

    Dus nogmaals bedankt en ik ga er mee aan de slag.
    Kan zijn dat ik je nog een keertje lastig val als ik het niet aan de praat krijg 😉

    Groeten,
    Michael

    Prima! Als je vragen hebt dan hoor ik het wel!

    Groet,
    Geert

    Thread starter michaelhastrich

    (@michaelhastrich)

    Ahh, thanks Geert 😉

    Thread starter michaelhastrich

    (@michaelhastrich)

    Hi Geert,

    Heb toch nog een vraagje, waar neem ik dit stuk code in op?

    <?php
    
    	if($_GET['list'] == "list" && !isset($_COOKIE['list'])){
    		//we gaan de cookie zetten
    		setcookie("list", "list", time()+3600);//verloopt in 1 uur
    	}
    
    	if($_GET['list'] == "grid" && isset($_COOKIE['list'])){
    		//we gaan de cookie verwijderen
    		setcookie("list");
    	}
    ?>

    Ik heb het nu in header.php staan in de <head>? Maar dat werkt niet.
    Zie ook niet terug in dev tools van Chrome dat de cookie gezet is.

    Kun je me nog iets verder op weg helpen?

    Thnx
    Michael

    geen probleem!

    Een overzicht van posts wordt gemaakt in de Loop deze kun je 9 van 10 keer terug vinden in de index.php in jouw theme mapje.

    Misschien kun je de code van de index.php even hier posten dan kijk ik er even naar!

    Geert

    Thread starter michaelhastrich

    (@michaelhastrich)

    Ok dit is hoe ik de if-else statement in index.php gebruik

    <?php
    /**
     * Default template file
     *
     * All of WordPress defaults back to index.php. This is the main blog page.
     *
     */
    ?>
    <?php get_header(); ?>
    
    <div id="index">
    
      <div id="content-wrapper">
    
        <?php if (have_posts()) : ?>
    
          <?php while (have_posts()) : the_post(); ?>
    		<?php
    		if($_COOKIE['list'] == "list"){
    			//toon de listversie
    			get_template_part( 'loop', 'bloglist' );
    		}else{
    			//toon de gridversie
    			get_template_part( 'loop', 'bloggrid' );
    		}
    		?>
    
          <?php endwhile; ?>
    
            <!-- includes next previous links or post level nav -->
            <?php locate_template( array( 'assets/includes/post-navigation.php' ), true ); ?>
    
          <?php else : ?>
    
            <h2>Not Found</h2>
            <p>Sorry, but you are looking for something that isn't here.</p>
            <?php get_search_form(); ?>
    
          <?php endif; ?>
    
      </div><!-- /#content-wrapper -->
    
      <?php get_sidebar(); ?>
    
    </div><!-- /#index -->
    
    <?php get_footer(); ?>

    Ik heb dus 2 aparte loops die afhankelijk van de cookie geladen moeten worden.

    Maar zou ik dan het stukje

    <?php
    
    	if($_GET['list'] == "list" && !isset($_COOKIE['list'])){
    		//we gaan de cookie zetten
    		setcookie("list", "list", time()+3600);//verloopt in 1 uur
    	}
    
    	if($_GET['list'] == "grid" && isset($_COOKIE['list'])){
    		//we gaan de cookie verwijderen
    		setcookie("list");
    	}
    ?>

    ook in de index.php moeten opnemen?

    Bedankt voor je tijd/hulp

    Probeer dit eens:

    <?php
    /**
     * Default template file
     *
     * All of WordPress defaults back to index.php. This is the main blog page.
     *
     */
    ?>
    <?php get_header(); ?>
    
    <div id="index">
    
      <div id="content-wrapper">
    	<a href="jouwdomeinnaam/lijst/?list=grid" target="_self">Gridvieuw</a> |
    	<a href="jouwdomeinnaam/lijst/?list=list" target="_self">Listview</a>
    		<?php
    
    		if($_GET['list'] == "list" && !isset($_COOKIE['list'])){
    			//we gaan de cookie zetten
    			setcookie("list", "list", time()+3600);//verloopt in 1 uur
    		}
    
    		if($_GET['list'] == "grid" && isset($_COOKIE['list'])){
    			//we gaan de cookie verwijderen
    			setcookie("list");
    		}
    
    		if (have_posts()) : ?>
    
          <?php while (have_posts()) : the_post(); ?>
    		<?php
    		if($_COOKIE['list'] == "list"){
    			//toon de listversie
    			get_template_part( 'loop', 'bloglist' );
    		}else{
    			//toon de gridversie
    			get_template_part( 'loop', 'bloggrid' );
    		}
    		?>
    
          <?php endwhile; ?>
    
            <!-- includes next previous links or post level nav -->
            <?php locate_template( array( 'assets/includes/post-navigation.php' ), true ); ?>
    
          <?php else : ?>
    
            <h2>Not Found</h2>
            <p>Sorry, but you are looking for something that isn't here.</p>
            <?php get_search_form(); ?>
    
          <?php endif; ?>
    
      </div><!-- /#content-wrapper -->
    
      <?php get_sidebar(); ?>
    
    </div><!-- /#index -->
    
    <?php get_footer(); ?>

    Wel even de url’s aanpassen he! (jouwdomeinnaam/lijst/?list=grid)

    Thread starter michaelhastrich

    (@michaelhastrich)

    🙂 Yep.
    Thanks ga even kijken of dit ‘m aan de gang krijgt.

    Dank voor je hulp.

10 reacties aan het bekijken - 1 tot 10 (van in totaal 10)
  • Het onderwerp ‘Cookie invoegen om user keuze te onthouden’ is gesloten voor nieuwe reacties.