Page 1 of 1

Posts anzeigen

Posted: Mon Oct 24, 2016 8:04 pm
by AndiLeni
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?

Re: Posts anzeigen

Posted: Tue Oct 25, 2016 12:28 am
by Edi
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.

Re: Posts anzeigen

Posted: Tue Oct 25, 2016 2:02 pm
by AndiLeni
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');
        }
    ?>

Re: Posts anzeigen

Posted: Tue Oct 25, 2016 11:10 pm
by Edi
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?

Re: Posts anzeigen

Posted: Wed Oct 26, 2016 2:08 pm
by AndiLeni
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>

Re: Posts anzeigen

Posted: Thu Oct 27, 2016 5:40 pm
by Edi
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)?

Re: Posts anzeigen

Posted: Sat Oct 29, 2016 8:13 pm
by AndiLeni
Dei Seite wird keinen Blog haben. Es soll sich sozusagen um ein digitales Programmheft handeln.

Re: Posts anzeigen

Posted: Sat Oct 29, 2016 8:38 pm
by Edi
Dann kannst Du Beiträge dazu verwenden und die Dateien für die Ausgabe von Beiträgen entsprechend anpassen. ;-)