link auf anker in neuer seite mit zusätzlicher funktion

paul66

Grünschnabel
Hallo,

vorab: ich kann selbst nicht programmieren und habe diese Seite auch nicht erstellt (läuft mit WORDPRESS).

Auf dieser Seite Neue Welt Reisen befindet sich ganz am Ende der Link Encomienda-System.
Der link öffnet unser Glossar in einem neuen Tab. Diese Glossarseite ist so programmiert, dass alle Einträge in einem Dokument liegen und bei Aufruf der Seite alle Inhalte ausgeblendet sind, bis auf den Buchstaben "A" und alle Einträge zu "A". Wenn man auf einen anderen Buchstaben klickt, werden alle Einträge zu diesem Buchstaben eingeblendet und gleichzeiteg alle anderen Buchstaben und Einträge verschwinden.

Man kann innerhalb des Glossars einfach verlinken z.B. .../#Encomienda, das funktioniert. Aber ein Link wie oben beschrieben, landet immer bei "A". Ich glaube dass es daran liegt, dass bei Aufruf der Seite standardmäßig alle anderen Buchstaben ausgeblendet sind. Je nachdem, wie schnell die Seite lädt, kann ich auch für einen kurzen Moment das gewünschte Linkziel (Encomienda) sehen, dann ist es wieder versteckt.

Rein theoretisch gibt es 2 mögliche Lösungen: mit dem Link den Anker/ die ID ansteuern und gleichzeitig einen Klick auf den Buchstaben "E" simulieren, damit alle Einträge zu "E" sichtbar sind

oder: mit dem Link den Anker/ die ID ansteuern und gleichzeitig die Funktion stoppen, die alles außer "A" ausblendet.
Hier ist der komplette Code der Glossar Datei:

PHP:
<?php
/* Template name: Glossar */
get_header();
?>

    <div class="breadcrumbs-container">
        <div class="breadcrumbs-box">
            <div class="breadcrumbs-line">
               <?php if( !is_front_page() && !is_404() && function_exists( 'breadcrumbs' ) ) : breadcrumbs( $defaults = array( 'show_current_item' => false ) ); endif; ?>
            </div>
           <div class="page-title"><?php the_title(); ?></div>
        </div>
    </div>
    <div class="continent-content-container glossary-page az-page" id="content" role="main">
        <div id="content-area" class="content-inner container-with-sidebar glossary-content-inner">

            <?php
           $args_main = array(
               'post_type'   => 'glossar',
               'posts_per_page' => -1,
               'post_parent' => 0,
               'orderby' => 'title',
               'order' => 'ASC'
           );
           $glossary_letters_list = new WP_Query( $args_main );
           ?>

            <?php if ( $glossary_letters_list->have_posts() ) : ?>

                <div class="letters-module">

                   <?php while ( $glossary_letters_list->have_posts() ) : $glossary_letters_list->the_post(); ?>

                        <div class="single-letter letter-parent-<?php print $post->ID; ?>" data-id="<?php print $post->ID; ?>">
                            <a href="#<?php print the_title(); ?>">
                               <?php the_title(); ?>
                            </a>
                        </div>

                    <?php endwhile; ?>

                </div>

                <?php wp_reset_postdata(); ?>

            <?php endif; ?>

            <?php
           $args = array(
               'post_type'   => 'glossar',
               'posts_per_page' => -1,
               'post_parent' => 0,
               'orderby' => 'title',
               'order' => 'ASC'
           );
           $glossar_child = null;
           $glossar_child = new WP_Query( $args );
           ?>

           <?php if ( $glossar_child->have_posts() ) : ?>
                <?php while ( $glossar_child->have_posts() ) : $glossar_child->the_post();
               $glossar_post_id = get_post();
               $glossar_child_args = array(
                   'post_type' => 'glossar',
                   'orderby' => 'title',
                   'order' => 'ASC',
                   'showposts' => -1,
                   'post_parent' => $glossar_post_id->ID
               );
               $glossar_child_query = new WP_Query($glossar_child_args);
               ?>

                   <?php if( $glossar_child_query->have_posts() ) { ?>
                       <?php while ($glossar_child_query->have_posts()) : $glossar_child_query->the_post(); ?>

                        <div class="<?php the_title(); ?> letter-container letter-parent-<?php print $glossar_post_id->ID; ?>" data-id="<?php print $glossar_post_id->ID; ?>">
                            <div id="glossary-letter-post-<?php print the_ID(); ?>" class="header-letter">
                               <?php the_title(); ?>
                            </div>
                            <div class="letter-content">
                               <?php the_content(); ?>
                            </div>
                            <div class="back-to-top">
                               <p><?php _e('nach oben', 'NeueWeltRisen') ?></p>
                            </div>
                        </div>

                        <?php endwhile; } ?>
                    <?php endwhile; ?>

                <?php wp_reset_postdata(); ?>

            <?php endif; ?>

        </div>
        <div class="sidebar-container">
            <?php get_sidebar('other'); ?>
        </div>
        <div class="clear"></div>
    </div>
    <script>
       jQuery( document ).ready(function(e) {
           $ = jQuery;
           $('.back-to-top').click(function() {
               $('html, body').animate({
                   scrollTop: $('.glossary-page').offset().top
               }, 2000);
           });
           var firstLetterActive = $('.letters-module .single-letter').eq(0).addClass('current-letter');
           var firstLetterActiveID = firstLetterActive.data( 'id' );
           var boxesActive = $('.glossary-content-inner .letter-container');
           var boxesID = $('.glossary-content-inner .letter-container').data( 'id' );
           if( firstLetterActiveID = boxesID ){
               boxesActive.filter('[data-id="'+boxesID+'"]').addClass('show-box');
           }
           $(".letter-container").hide();
           $(".show-box").show();
           $('.glossary-content-inner .letters-module .single-letter').click(function() {
               var currEl = $('.letters-module').find('.single-letter.current-letter');
               var dataID = $( this ).data( 'id' );
               if(!$(this).hasClass('current-letter')){
                   $(this).addClass('current-letter').siblings().removeClass('current-letter');
               }
               var currentSelectLetterID = $('.single-letter.current-letter').data( 'id' );
               var currentSelectBoxID = $('.glossary-content-inner').find('.letter-container.show-box').data( 'id' );
               if( currentSelectLetterID != currentSelectBoxID ){
                   $('.glossary-content-inner').find('.letter-container.show-box').removeClass('show-box').addClass('no-box');
                   $('.letter-container').hide();
               }
        var disabledSelectBoxID = $('.glossary-content-inner').find('.letter-container.no-box').data( 'id' );
               if( currentSelectLetterID = disabledSelectBoxID ){
                   $('.glossary-content-inner .letter-container').filter('[data-id="'+dataID+'"]').removeClass('no-box').addClass('show-box');
                   $('.letter-container.show-box').show();
               }
           });

      var clickAnchor = $('.letter-container a');
      clickAnchor.click(function() {
        var letterID = $(this).attr('href').replace('#', '.');
        var searchID = $('#content-area').find(letterID).data('id');

        var currentSelectBoxID = $('.glossary-content-inner').find('.letter-container.show-box').data( 'id' );
        if( searchID != currentSelectBoxID ){
          $('.glossary-content-inner').find('.letter-container.show-box').removeClass('show-box').addClass('no-box');
                   $('.letter-container').hide();
               }
        $('.glossary-content-inner .letter-container').filter('[data-id="'+searchID+'"]').removeClass('no-box').addClass('show-box');
        $('.letter-container.show-box').show();

        var currentLetter = $('.letters-module .single-letter');
        var currentLetterID = $('.letters-module .single-letter').filter('[data-id="'+searchID+'"]').data( 'id' );
        currentLetter.removeClass('current-letter');
        if( searchID = currentLetterID ){
          currentLetter.filter('[data-id="'+searchID+'"]').addClass('current-letter');
          var container = $("html,body");
          var scrollTo = $(letterID);
          container.animate({
            scrollTop: scrollTo.offset().top - container.offset().top,
            scrollLeft: 0
          },300)
               }
      })
       });
   </script>

<?php get_footer(); ?>
 
Hallo,
das Problem ist, dass ich mit einem Link zu einem bestimmten Stichwort von einer Seite außerhalb des Glossars immer am Anfang des Glossars beim Buchstaben "A" lande und das ist ja gerade NICHT der Sinn.

Danke.
 
hallo,

hab mir mal den Code angeschaut, Du musst im JS-Teil ganz unten die Zeile

Code:
var firstLetterActive = $('.letters-module .single-letter').eq(0).addClass('current-letter');

etwas umbauen. Am besten entfernst du diese Zeile und fügst folgendes ein.

Code:
//auslesen des anchor der url ohne #
var hash = window.location.href.split('#')[0]

//Ermittlung der Unicode Nummer des Buchstaben
var unicode = hash.charCodeAt(0);

//Ermittlung der Position des Buchstaben im Alphabet
//65 entspricht dem unicodezeichen von "A"
// Arrays beginnen immer mit 0, daher entspricht A der Positionsnummer 0, B = 1,usw.
var number = parseInt(65) - parseInt(unicode)

//aktivieren des ersten Letters nach dem angezeigten Buchstaben
var firstLetterActive = $('.letters-module .single-letter').eq(number).addClass('current-letter');
 
Hallo Kalito,
erstmal Danke! Leider keine Besserung. Für einen kurzen Moment springt die Seite zum gewünschten Eintrag, aber nach 1 bis 2 Zehntelsekunden bin ich wieder bei "A". Oder muss ich am link noch etwas ändern (bisher ist der link: .../glossary-letter-post-8013).

Paul
 
Hallo Kalito,
ich hatte den link probehalber mal auf .../glossar/#E geändert, das hatte leider kein anderes Ergebnis als wieder den Anfang des Glossars bei "A". Ich wäre schon zufrieden, wenn ich auf einen bestimmten Buchstaben verlinken könnte. Danke.
 
Zurück