ProcessWire - Snippets

Aus Wikizone
Wechseln zu: Navigation, Suche

Basics

Bild in Template einbinden

<img src="<?php echo $config->urls->templates?>img/menu.png" alt="Home">

Link zu Seite

<a href="<?php echo $pages->get('/kontakt/')->url; ?>">

Wert aus Textfeld

<div class="<? echo $page->get("content_class")?>">

Bilder

Mehrere Bilder aus dem Backend

$myImages='';
if(count($page->images)) {
  foreach($page->images as $image) {
    $myImages .=  '<img class="img-responsive" src="'.$image->url.'">';
  }
}

Einzelbild einfügen

Bild aus Backend als Hintergrund einfügen

(Feldname hier: main_image)

if($page->main_image){$image = $page->main_image->size(640,960);}
else $image = NULL;
...
if($image){
  echo "
  <div class='a-3-4 team-image' style='background-image:url({$image->url})'>
    <div>{$myContent}</div>
  </div>
  ";
}

= n-tes Bild einfügen

$page->images->eq(1); // second image

Navigation

Redirect zu erster Unterseite

https://processwire.com/talk/topic/15-how-do-i-create-a-page-that-redirects-to-its-first-child/

Field redirects_to_first_child erstellen und im Template einfügen.

<?php 
  if($page->numChildren && $page->redirects_to_first_child) 
  $session->redirect($page->child()->url); 
?>

Erzeugt 301 Weiterleitung

Anderer Ansatz wäre evtl. den Link bei der Menügenerierung direkt zu generieren.

Redirect anderer Seite in der Navigation

https://processwire.com/talk/topic/762-howto-menu-item-that-links-to-another-page/

1. Create a new field and call it 'redirect_url' or something like that, and use the 'URL' fieldtype.

2. Add that field to your template where you'd want to use it, or create a new template just for the purpose, like a template named 'redirect'.

3. Edit the page that you want to be a symlink and populate the 'redirect_url' field with the URL you want it to redirect to.

4. In your nav-generation code that links to the pages, do something like this:

<?php
$url = $subpage->get("redirect_url|url"); // use redirect_url if there, otherwise use url
echo "<a href='$url'>{$subpage->title}</a>";

5. You might also want to add this to your template that has the 'redirect_url' field: just in case there's anything linking to it directly. That way it'll send people to the right place either way:

<?php
if($page->redirect_url) $session->redirect($page->redirect_url); 

Breadcrumb

	<!-- breadcrumbs -->
	<div class='breadcrumbs'><?php 
		// breadcrumbs are the current page's parents
		foreach($page->parents() as $item) {
			echo "<span><a href='$item->url'>$item->title</a></span> "; 
		}
		// optionally output the current page as the last item
		echo "<span>$page->title</span> "; 
	?></div>

Navigation Bar

Homepage + Kindseiten (1 Level). Die Variable $homepage wird i.d.R. in init.php definiert:

$homepage = $pages->get('/');
	<ul class='topnav'><?php 
		// top navigation consists of homepage and its visible children
		foreach($homepage->and($homepage->children) as $item) {
			if($item->id == $page->rootParent->id) {
				echo "<li class='current'>";
			} else {
				echo "<li>";
			}
			echo "<a href='$item->url'>$item->title</a></li>";
		}
		// output an "Edit" link if this page happens to be editable by the current user
		if($page->editable()) echo "<li class='edit'><a href='$page->editUrl'>Edit</a></li>";
	?></ul>

Kindseiten mit $page->children

<?=$page->children?>

Output

5723,4958,5937

Beispiel

<ul>
<?php
foreach($page->children as $child)
  echo "<li><a href='{$child->url}'>{$child->title}</a></li>";
?>
</ul>

Ergebnis:

<ul>

<li><a href='/about/contact/'>Contact Us</a></li>
<li><a href='/about/press/'>Press Releases</a></li>
<li><a href='/about/staff/'>Our Staff</a></li>

</ul>

Seitenaufrufe

http://processwire.com/api/variables/pages/

Inhalt einer Seite mit $page->get()

Beispiel

<p>Visit us at: 
<?php$contact = $pages->get("/about/contact/");
echo $contact->address;
?>
</p>

Kürzer:

<p>Visit us at: <?=$pages->get("/about/contact/")->address?></p>

Mehrere Seiten finden mit find()

"Featured" Checkbox im Backend angehakt.

<ul>
<?php$features = $pages->find("featured=1");
foreach($features as $feature)
   echo "<li><a href='{$feature->url}'>{$feature->title}</a></li>";
?>
</ul>

Komplexere Beispiele

Limitiert, sortiert und in Unterverzeichnis

$pages->find("parent=/about/press/, featured=1, limit=3, sort=-date");

oder

$pages->get("/about/press/")->children("featured=1, limit=3, sort=-date");

Finde in Kategorie

$pages->get("/about/press/")->find("featured=1, limit=3, sort=-date");

Finde über Template

$pages->find("template=press_release, featured=1, limit=3, sort=-date");

Ausführliches Beispiel mit Ausgabe

<ul>
<?php$features = $pages->find("template=press_release, featured=1, limit=3, sort=-date");
foreach($features as $feature) {
  echo "<li>" .
    "<h3><a href='{$feature->url}'>{$feature->title}</a></h3>" .
    "<span class='date'>{$feature->date}</span>" .
    "<p>{$feature->summary}</p>" .
    "</li>";}
?></ul>

Searchbar

	<!-- search form-->
	<form class='search' action='<?php echo $pages->get('template=search')->url; ?>' method='get'>
		<input type='text' name='q' placeholder='Search' value='<?php echo $sanitizer->entities($input->whitelist('q')); ?>' />
		<button type='submit' name='submit'>Search</button>
	</form>

Conditions

Conditions für Navigation

// If the page has children, then render navigation to them under the body.
// See the _func.php for the renderNav example function.
if($page->hasChildren) {
	$content .= renderNav($page->children);
}


// if the rootParent (section) page has more than 1 child, then render 
// section navigation in the sidebar
if($page->rootParent->hasChildren > 1) {
	$sidebar = renderNavTree($page->rootParent, 3) . $page->sidebar; 
}

Copy and Paste

<?php echo $pages->get('/ueber-uns/')->url; ?>

$content_left = $page->get('content_left');
if($page->main_image){$image = $page->main_image->size(640,960);}
else $image = NULL;
<ul class='nav-list'>
						<?php
						// Childrens
						foreach(($page->children) as $item) {
							if($item->id == $page->rootParent->id) {
								echo '<li class="current">';
							} else {
								echo '<li>';
							}
							echo '<a class="ajax-link" href="'.$item->url.'">'.$item->title.'</a></li>';
						}
						?>
					</ul>