Navigation fehlerhaft, wenn Blog nicht auf Startseite ist

User avatar
Torsten_Kelsch
Legend Bludit
Posts: 263
Joined: Thu Aug 27, 2015 10:24 pm
Location: Germany
Has thanked: 4 times
Been thanked: 2 times
Contact:

Ich habe folgendes Problem, das ich besser in meiner Muttersprache Deutsch als in Englisch beschreiben kann: Für einen Kunden habe ich den News-Bereich (= Blog-Bereich) nicht auf die Startseite (die hier Home heißt), sondern eine andere Seite gepackt. Ich habe dafür ein Template news.php erstellt, und alles funktioniert auch so weit. Die Einstellungen im Backend sehen folgendermaßen aus:

Image

Doch wo es hakt: Befindet sich der Frontend-Besucher auf dieser News-Seite, so wird sie nicht als aktiv markiert, während das bei den anderen Seiten jedoch klappt. Mir ist das irgendwie unverständlich, und wenn jemand eine Lösung hätte, wäre ich sehr dankbar.
On Error GoTo Bed
User avatar
Edi
Site Admin
Posts: 3121
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 54 times
Been thanked: 77 times
Contact:

Welches Theme verwendest Du?
Clickwork - Websites mit Bludit | Planet Bludit - Tipps und Snippets
User avatar
Torsten_Kelsch
Legend Bludit
Posts: 263
Joined: Thu Aug 27, 2015 10:24 pm
Location: Germany
Has thanked: 4 times
Been thanked: 2 times
Contact:

Edi wrote:Welches Theme verwendest Du?
Ein selbst erstelltes (da ich für Kunden immer individuell gestalte).
On Error GoTo Bed
User avatar
Edi
Site Admin
Posts: 3121
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 54 times
Been thanked: 77 times
Contact:

Unter welcher Adresse wird die Blog-Seite aufgerufen?
Clickwork - Websites mit Bludit | Planet Bludit - Tipps und Snippets
User avatar
Torsten_Kelsch
Legend Bludit
Posts: 263
Joined: Thu Aug 27, 2015 10:24 pm
Location: Germany
Has thanked: 4 times
Been thanked: 2 times
Contact:

Edi wrote:Unter welcher Adresse wird die Blog-Seite aufgerufen?
Nicht auf der Startseite, sondern einer der weiteren Seiten. Genauer gesagt: Ich habe ein Template für diese News-Seite gebaut, das news.php heißt – das ist wahrscheinlich der Knackpunkt, denn so ein Name ist ja nirgends definiert und wird darüber hinaus in der Schleife zum Aufbau des Menüs nicht angegeben:

Code: Select all

<?php
	foreach($parents as $page) {
		echo '<li'.( ($page->key()==$Url->slug())?' class="active"':'').'><a href="'.$page->permalink().'">'.$page->title().'</a></li>';
	}
?>
Also müsste ich erst mal eine Klasse erstellen, wie /bl-kernel/page.class.php, nicht wahr? Oder gibt es eine Möglichkeit, Unter-Termplates für Seiten zu bauen? – Jedenfalls fällt wohl so langsam bei mir der Groschen, wo es hakt.

Hier noch mein Quellcode der News-Seite:

Code: Select all

<h1>News</h1>

<!-- Show each post on this page -->
<?php foreach ($posts as $Post): ?>

<article class="post">

	<!-- Show plugins, Hook: Post Begin -->
	<?php Theme::plugins('postBegin') ?>

	<!-- Post's header -->
	<header>
		<h2><a href="<?php echo $Post->permalink() ?>"><?php echo $Post->title() ?></a></h2>
		<p><?php echo $Post->description() ?></p>

         <?php
           // Get the user who created the post.
			$User = $Post->user();
			
			// Default author is the username.
			$author = $User->username();

            // If the user complete the first name or last name this will be the author.
            if( Text::isNotEmpty($User->firstName()) || Text::isNotEmpty($User->lastName()) ) {
            	$author = $User->firstName().' '.$User->lastName();

				// Local month
				$nmeng = array('January','February','March','April','May','June','July','August','September','October','November','December');
				$nmger = array('Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
				$dt = $Post->date();
				$dt = str_ireplace($nmeng, $nmger, $dt);
            }
         ?>
		<p>
			<?php date_default_timezone_set('Europe/Berlin'); ?>
			<time><?php echo $dt; ?></time>
		</p>
	</header>

	<main>	
		<!-- Cover Image -->
		<?php
			if($Post->coverImage()) {
				echo '<a href="'.$Post->permalink().'" class="image featured"><img src="'.$Post->coverImage().'" alt="Cover Image"></a>';
			}
		?>
	
		<!-- Post's content, the first part if has pagebrake -->
		<?php echo $Post->content(false) ?>
	</main>

	<!-- Post's footer -->
	<footer>
		<!-- Read more button -->
	    <?php if($Post->readMore()) { ?>
		<ul class="actions">
			<li><a href="<?php echo $Post->permalink() ?>" class="button"><?php $Language->p('Read more') ?></a></li>
		</ul>
		<?php } ?>
	</footer>

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

</article>

<?php endforeach; ?>

<!-- Pagination -->
<ul class="actions pagination">
<?php
	if( Paginator::get('showNewer') ) {
		echo '<li><a href="'.Paginator::urlPrevPage().'" class="button big previous">'.$Language->get('Prev page').'</a></li>';
	}

	if( Paginator::get('showOlder') ) {
		echo '<li><a href="'.Paginator::urlNextPage().'" class="button big next">'.$Language->get('Next page').'</a></li>';
	}
?>
</ul>
On Error GoTo Bed
User avatar
Edi
Site Admin
Posts: 3121
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 54 times
Been thanked: 77 times
Contact:

So auf die Schnelle... Ich würde versuchen, die Bedingungen in der Datei index.php anzupassen. Die sind standardmässig so definiert:

Code: Select all

		<?php
			if($Url->whereAmI()=='post') {
				include(THEME_DIR_PHP.'post.php');
			}
			elseif($Url->whereAmI()=='page') {
				include(THEME_DIR_PHP.'page.php');
			}
			else {
				include(THEME_DIR_PHP.'home.php');
			}

		?>
Ich denke, Du könntest die Bedingungen oder die Bedingung für "page" mit einer Zusatzbedigung beispielsweise mit dem Seitentitel der Blog-Seite ("$Page→key()") für das Template news.php erweitern.
Clickwork - Websites mit Bludit | Planet Bludit - Tipps und Snippets
User avatar
Torsten_Kelsch
Legend Bludit
Posts: 263
Joined: Thu Aug 27, 2015 10:24 pm
Location: Germany
Has thanked: 4 times
Been thanked: 2 times
Contact:

Danke, Edi, aber ich denke, da wirfst du was durcheinander. Die Seite News wird ja korrekt aufgerufen, denn mein Code in der index.php lautet folgendermaßen:

Code: Select all

<div class="content">
	<?php
		if( ($_SERVER['REQUEST_URI']=='/home') || ($_SERVER['REQUEST_URI']=='/') ) {
			include(THEME_DIR_PHP.'home.php');
		}	
		elseif( ($Url->whereAmI()=='tag') || ($Url->whereAmI()=='blog') ) {
			include(THEME_DIR_PHP.'news.php');
		}	
		elseif($Url->whereAmI()=='post') {
			include(THEME_DIR_PHP.'post.php');
		}
		elseif($Url->whereAmI()=='page') {
			include(THEME_DIR_PHP.'page.php');
		}		
	?>
</div>
Auch in der Navigation erscheint sie als Menüeintrag, allerdings wird dieser nicht markiert, wenn man gerade auf der Seite ist. Ich habe jetzt herausgefunden, dass per Echo-Befehl

Code: Select all

$page->key()
etwas ausgibt,

Code: Select all

$Url->slug()
aber nicht. Das bedeutet also, dass die Bedingung

Code: Select all

$page->key()==$Url->slug()
im Falle der News-Seite nie erfüllt wird. Warum die Ausgabe des Slugs leer bleibt, kann ich mir nur dadurch erklären, dass möglicherweise in dem Seitentemplate etwas nicht stimmt. Ich versuche, den Fehler zu finden, hatte bisher aber noch keinen Erfolg.

Es wäre wirklich einfacher, wenn Diego den Blogbereich nicht so an die Startseite binden würde. Vielleicht wird ja mit Bludit 2.0 alles besser, wenn zwischen Posts und Seiten gar nicht mehr so unterschieden wird.
On Error GoTo Bed
User avatar
Edi
Site Admin
Posts: 3121
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 54 times
Been thanked: 77 times
Contact:

Da scheint einiges durcheinandergeraten zu sein...

1) Wie wird die Seite aufgerufen? Mit welcher URL? Ich habe Dich das bereits gefragt, aber Du hast es mir nicht verraten. ;-)

2) Woher holst Du das "blog" in der Bedingung für das Template news.php? Als mögliche Werte sind vorgegeben "home", "post", "page" und "tag".

3) Wie erscheint der Menüeintrag in der Navigation? Hast Du die Navigation angepasst?

4) "$Url->slug()" gibt den "Slug" aus, wenn einer vorhanden ist. Das heisst, dass bei der Hauptseite kein "Slug" ausgegeben wird.

5) "$page->key()" gibt nicht den gesuchten Wert aus. Die Anweisung wäre "$Page->key". Da news.php bei Dir aber nicht als Seite definiert ist, wird kein Wert ausgegeben.
Es wäre wirklich einfacher, wenn Diego den Blogbereich nicht so an die Startseite binden würde. Vielleicht wird ja mit Bludit 2.0 alles besser, wenn zwischen Posts und Seiten gar nicht mehr so unterschieden wird.
Bludit 2.0 kann entweder als Blog oder für statische Seiten definiert werden. Für einen Blog wird es zwei oder drei vorderfinierte statische Seiten geben. Für die Verwendung von mehreren statischen Seiten und einem Blog wird es vielleicht Plugins geben. Als Richtlinie gilt nach wie vor: So einfach wie möglich.
Clickwork - Websites mit Bludit | Planet Bludit - Tipps und Snippets
User avatar
Torsten_Kelsch
Legend Bludit
Posts: 263
Joined: Thu Aug 27, 2015 10:24 pm
Location: Germany
Has thanked: 4 times
Been thanked: 2 times
Contact:

(Na, klasse, als ich die Vorschau einschalten wollte, schmeißt mich das Forumssystem raus, ich muss mich neu einloggen, mein Geschriebenes ist futsch und ich kann alles neu pinnen. Da kommt echt Begeisterung auf.)

@Edi: Danke für deine vielen Bemühungen, und hier sind meine Antworten:
  1. http://www.matzner.de/news
  2. Aus Einstellungen > Erweitert > URL-Erweiterungen in der ursprünglichen Form. Wenn ich „blog“ als Bedingung für das Template „news.php“ in etwas anderes ändere, wird das Template nicht gefunden. Vielleicht ist „blog“ eine Konstante tief im System oder so.
  3. Es wird korrekt „News“ ausgegeben, allerdings ohne aktiv markiert zu werden, wenn man auf der Seite ist.
  4. Das mit der Hauptseite habe ich schon durch eigenen Code hingekriegt. Dennoch müsste es ja einen Slug für die Hauptseite geben, so etwas wie eine leere Zeichenkette oder einen Slash – ist aber jetzt egal.
  5. Ich habe $page in $Page geändert (in der Navigations-Foreach-Schleife), was zur Folge hat, dass auf jeder Seite der Inhalt der letzten Seite ausgegeben wird. Die Variable wird ja aber auch erst in der Schleife (neu) definiert, wenn ich das richtig sehe – und ich kann statt $Page auch $seite, $Seite oder sonst was schreiben.
Ich habe aber etwas Seltsames entdeckt: Wenn ich den Slug im Backend von news in neues oder ein anderes Wort ändere, klappt die aktive Anzeige in der Navigation. Das ist mir völlig unverständlich. Der bisher einzige Blogeintrag ist dann aber verschwunden. Natürlich könnte man ihn neu schreiben, aber der Kunde will nun mal, dass die Seite „News“ heißt.

Wie auch immer; ich werde die Navigation jetzt hart kodieren, ich muss endlich mit dem Auftrag fertig werden. In naher Zukunft wird der Kunde wohl keine neuen Seiten anlegen oder bestehende löschen.

Danke, Edi, für deine zeitaufwändige Hilfe. Ich weiß das sehr zu schätzen und werde weiterhin versuchen, im Gegenzug hier im Forum anderen Benutzern zu helfen, so gut ich kann.
On Error GoTo Bed
User avatar
Edi
Site Admin
Posts: 3121
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 54 times
Been thanked: 77 times
Contact:

Wieder etwas gelernt... Ich wusste zwar, dass Diego das machen will, habe mich aber nicht darum gekümmert. :oops:

Also: Wenn Du eine Seite mit dem Slug einrichtest, der unter "URL-Erweiterungen" > "Blog" definiert ist, werden die Blogbeiträge auf der Seite mit dem Titel des Slugs angezeigt. Dazu ist kein zusätzliches Template nötig.

Diese Seite hat dann aber keinen Slug und wird deshalb im Menü nicht hervorgehoben, wenn sie aufgerufen wird.

Den Rest schaue ich mir morgen an.
Clickwork - Websites mit Bludit | Planet Bludit - Tipps und Snippets
Post Reply