Posts anzeigen

Post Reply
AndiLeni
Ssr. Bludit
Posts: 12
Joined: Mon Oct 24, 2016 4:28 pm

Mon Oct 24, 2016 8:04 pm

Hallo.
Ich habe eine frage bezüglich des Anzeigen von Posts.
Meine index.php habe ich wie folgt angepasst:

Code: Select all

<?php
        if( ($Url->whereAmI()=='programm') || ($Url->whereAmI()=='tag') )
        {
            include(PATH_THEME_PHP.'programm.php');
        }
        elseif($Url->whereAmI()=='post')
        {
            include(PATH_THEME_PHP.'post.php');
        }
        elseif($Url->whereAmI()=='page')
        {
            include(PATH_THEME_PHP.'page.php');
        }
    ?>
Es soll also auf der Seite "Programm" eine liste mit allen Posts angezeigt werden. Leider geht das mit dem so von mir umgeschriebenen Code nicht. Gibt es da eine allgemeine Lösung für das Problem? Oder kann man im Backend für jede Seite ein eigenes Theme wählen wie in anderen CMS auch?
User avatar
Edi
Site Admin
Posts: 1663
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Contact:

Tue Oct 25, 2016 12:28 am

Wenn Du den Titel einer Seite als Bedingung verwenden willst, wäre das bei einer Seite mit dem Titel "Test":

Code: Select all

if($Page->title()=='Test')
"post" und "page" sind Inhaltstypen, keine Titel.
Planet Bludit, Tipps, Snippets und nützliche Links. - Newsletter, Informationen zu Bludit (auf Deutsch).
AndiLeni
Ssr. Bludit
Posts: 12
Joined: Mon Oct 24, 2016 4:28 pm

Tue Oct 25, 2016 2:02 pm

Ok. Ich habe die index.php angepasst. Aber meine Posts werden trotzdem noch nicht angezeigt.
Mit folgendem Code wird mir gesagt, dass die Variable 'Post' nicht definiert ist.

Code: Select all

<?php

// Check module DOM if installed.
if( extension_loaded('dom') && isset($posts[0]) )
{
    $Post = $posts[0];
    $dom = new DOMDocument();
    $dom->loadHTML('<meta http-equiv="content-type" content="text/html; charset=utf-8">'.$Post->content());
    $finder = new DomXPath($dom);
    $classname = "bludit-img-justify";
    $images = $finder->query("//*[contains(@class, '$classname')]");

    if($images->length>0) {
        // First image from the list
        $image = $images->item(0);
        // Get value from attribute src
        $coverImage = $image->getAttribute('src');
        // Remove the image from the content
        $image->parentNode->removeChild($image);
        // Set the new content without the image
        $Post->setField('content', $dom->saveHTML(), true);
    }
}
?>

<!-- Page Header -->
<!-- Set your background image for this header on the line below. -->
<header class="intro-header" style="background-image: url('<?php echo $coverImage ?>')">
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                <div class="site-heading">
                    <h1><?php echo $Site->title() ?></h1>
                    <hr class="small">
                    <span class="subheading"><?php echo $Post->description() ?></span>
                </div>
            </div>
        </div>
    </div>
</header>

<div class="container">
    <div class="row">
        <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">

            <!-- Foreach post -->
            <?php foreach ($posts as $Post): ?>

                <!-- Plugins Post Begin -->
                <?php Theme::plugins('postBegin') ?>

                <div class="post-preview">
                    <a href="<?php echo $Post->permalink() ?>">
                        <h2 class="post-title"><?php echo $Post->title() ?></h2>
                        <h3 class="post-subtitle"><?php echo $Post->description() ?></h3>
                    </a>
                    <p class="post-meta"><?php echo $Language->g('Posted By').' '.$Post->user('username').' '.$Post->date() ?></p>
                </div>

                <!-- Plugins Post End -->
                <?php Theme::plugins('postEnd') ?>

                <hr>

            <?php endforeach; ?>

            <!-- Pager -->
            <ul class="pager">
            <?php
                if( Paginator::get('showNewer') ) {
                    echo '<li class="previous"><a href="'.HTML_PATH_ROOT.'?page='.Paginator::get('prevPage').'">Previous</a></li>';
                }

                if( Paginator::get('showOlder') ) {
                    echo '<li class="next"><a href="'.HTML_PATH_ROOT.'?page='.Paginator::get('nextPage').'">Next</a></li>';
                }
            ?>
            </ul>

        </div>
    </div>
</div>
Desweiteren funktioniert der Menü-Toggle für die Bootstrap Navbar nicht mehr wenn ich den code wie folgt abändere:

Code: Select all

<?php
        if( ($Url->whereAmI()=='home') || ($Url->whereAmI()=='tag') )
        {
            include(PATH_THEME_PHP.'home.php');
        }
        elseif($Url->whereAmI()=='post')
        {
            include(PATH_THEME_PHP.'post.php');
        }
        elseif($Url->whereAmI()=='page')
        {
            include(PATH_THEME_PHP.'page.php');
        }
	  	elseif($Page->title()=='Programm');
        {
            include(PATH_THEME_PHP.'programm.php');
        }
    ?>
User avatar
Edi
Site Admin
Posts: 1663
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Contact:

Tue Oct 25, 2016 11:10 pm

In welcher Datei ist der erste Code?

So kann der zweite Code nicht funktionieren: Wenn es sich beim Inhalt um den Inhalt einer Seite handelt, wird die Theme-Datei page.php verwendet.

Du müsstest also eine zweite if/else-Bedingung innerhalb der Bedingung "elseif($Url->whereAmI()=='page')" definieren:

Code: Select all

<?php
        if( ($Url->whereAmI()=='home') || ($Url->whereAmI()=='tag') )
        {
            include(PATH_THEME_PHP.'home.php');
        }
        elseif($Url->whereAmI()=='post')
        {
            include(PATH_THEME_PHP.'post.php');
        }
        elseif($Url->whereAmI()=='page')
        {
            if($Page->title()=='Programm')
            {            
                include(PATH_THEME_PHP.'programm.php');
            }
            else
            {
                include(PATH_THEME_PHP.'page.php');
            }
        }
?>
Du kannst aber auch die Bedingungen für die Seite "Programm" verknüpfen:

Code: Select all

<?php
        if( ($Url->whereAmI()=='home') || ($Url->whereAmI()=='tag') )
        {
            include(PATH_THEME_PHP.'home.php');
        }
        elseif($Url->whereAmI()=='post')
        {
            include(PATH_THEME_PHP.'post.php');
        }
        elseif( ($Url->whereAmI()=='page') and ($Page->title()=='Programm') )
        {
            include(PATH_THEME_PHP.'programm.php');
         }
        elseif( ($Url->whereAmI()=='page')
        {
            include(PATH_THEME_PHP.'page.php');
        }
?>
Was mir nicht klar ist: Was soll auf der Seite "Programm" angezeigt werden. Alle Beiträge in voller Länge?
Planet Bludit, Tipps, Snippets und nützliche Links. - Newsletter, Informationen zu Bludit (auf Deutsch).
AndiLeni
Ssr. Bludit
Posts: 12
Joined: Mon Oct 24, 2016 4:28 pm

Wed Oct 26, 2016 2:08 pm

Ah danke. So langsam wird mir das Konzept bewusst :)
Die Seite soll dann Posts anzeigen. Allerdings abgewandelt, sodass ich eine Seite erhalte, auf welcher man ständig neue Veranstaltungen auflisten kann.
Ich habe versucht, den Code aus der home.php in die programm.php zu setzen was leider nur dazu geführt hat, dass 'Post' nicht definiert ist.

Code: Select all

<?php

// Check module DOM if installed.
if( extension_loaded('dom') && isset($posts[0]) )
{
    $Post = $posts[0];
    $dom = new DOMDocument();
    $dom->loadHTML('<meta http-equiv="content-type" content="text/html; charset=utf-8">'.$Post->content());
    $finder = new DomXPath($dom);
    $classname = "bludit-img-justify";
    $images = $finder->query("//*[contains(@class, '$classname')]");

    if($images->length>0) {
        // First image from the list
        $image = $images->item(0);
        // Get value from attribute src
        $coverImage = $image->getAttribute('src');
        // Remove the image from the content
        $image->parentNode->removeChild($image);
        // Set the new content without the image
        $Post->setField('content', $dom->saveHTML(), true);
    }
}
?>

<!-- Page Header -->
<!-- Set your background image for this header on the line below. -->
<header class="intro-header" style="background-image: url('<?php echo $coverImage ?>')">
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                <div class="site-heading">
                    <h1><?php echo $Site->title() ?></h1>
                    <hr class="small">
                    <span class="subheading"><?php echo $Post->description() ?></span>
                </div>
            </div>
        </div>
    </div>
</header>

<div class="container">
    <div class="row">
        <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">

            <!-- Foreach post -->
            <?php foreach ($posts as $Post): ?>

                <!-- Plugins Post Begin -->
                <?php Theme::plugins('postBegin') ?>

                <div class="post-preview">
                    <a href="<?php echo $Post->permalink() ?>">
                        <h2 class="post-title"><?php echo $Post->title() ?></h2>
                        <h3 class="post-subtitle"><?php echo $Post->description() ?></h3>
                    </a>
                    <p class="post-meta"><?php echo $Language->g('Posted By').' '.$Post->user('username').' '.$Post->date() ?></p>
                </div>

                <!-- Plugins Post End -->
                <?php Theme::plugins('postEnd') ?>

                <hr>

            <?php endforeach; ?>

            <!-- Pager -->
            <ul class="pager">
            <?php
                if( Paginator::get('showNewer') ) {
                    echo '<li class="previous"><a href="'.HTML_PATH_ROOT.'?page='.Paginator::get('prevPage').'">Previous</a></li>';
                }

                if( Paginator::get('showOlder') ) {
                    echo '<li class="next"><a href="'.HTML_PATH_ROOT.'?page='.Paginator::get('nextPage').'">Next</a></li>';
                }
            ?>
            </ul>

        </div>
    </div>
</div>
User avatar
Edi
Site Admin
Posts: 1663
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Contact:

Thu Oct 27, 2016 5:40 pm

AndiLeni wrote: Die Seite soll dann Posts anzeigen. Allerdings abgewandelt, sodass ich eine Seite erhalte, auf welcher man ständig neue Veranstaltungen auflisten kann.
Also... Bis jetzt verstehe ich soviel: Du willst auf einer Seite Veranstaltungen auflisten. Die Veranstaltungen sind Beiträge (Posts).

Hat die Website auch einen Blog? Wenn ja: Wie unterscheiden sich die Veranstaltungen von den Beiträgen des Blogs (durch ein Schlagwort oder mehrere Schlagworte)?
Planet Bludit, Tipps, Snippets und nützliche Links. - Newsletter, Informationen zu Bludit (auf Deutsch).
AndiLeni
Ssr. Bludit
Posts: 12
Joined: Mon Oct 24, 2016 4:28 pm

Sat Oct 29, 2016 8:13 pm

Dei Seite wird keinen Blog haben. Es soll sich sozusagen um ein digitales Programmheft handeln.
User avatar
Edi
Site Admin
Posts: 1663
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Contact:

Sat Oct 29, 2016 8:38 pm

Dann kannst Du Beiträge dazu verwenden und die Dateien für die Ausgabe von Beiträgen entsprechend anpassen. ;-)
Planet Bludit, Tipps, Snippets und nützliche Links. - Newsletter, Informationen zu Bludit (auf Deutsch).
Post Reply