ProcessWire - Snippets: Unterschied zwischen den Versionen
(→Bilder) |
(→Bilder) |
||
| Zeile 8: | Zeile 8: | ||
<div class="<? echo $page->get("content_class")?>"> | <div class="<? echo $page->get("content_class")?>"> | ||
== Bilder == | == Bilder == | ||
| + | === Einzelbild einfügen === | ||
| + | ====Bild aus Backend als Hintergrund einfügen==== | ||
| + | (Feldname hier: ''main_image'') | ||
| + | <syntaxhighlight lang="php"> | ||
| + | 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> | ||
| + | "; | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | ==== n-tes Bild einfügen === | ||
| + | $page->images->eq(1); // second image | ||
| + | |||
=== Mehrere Bilder aus dem Backend === | === Mehrere Bilder aus dem Backend === | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
| Zeile 40: | Zeile 59: | ||
$gallery .= '</div>'; | $gallery .= '</div>'; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Navigation == | == Navigation == | ||
Version vom 30. März 2017, 16:12 Uhr
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
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
Mehrere Bilder aus dem Backend
$myImages='';
if(count($page->images)) {
foreach($page->images as $image) {
$myImages .= '<img class="img-responsive" src="'.$image->url.'">';
}
}
Beispiel 2
echo $page->images->implode(function($item) {
$large = $item->size(1200,800);
$thumb = $item->size(400,300);
return "<li><a href='$large->url'><img src='$thumb->url' alt='$item->description'></a></li>";
}, array('prepend' => '<ul>', 'append' => '</ul>'));
Einfache Gallerie
$gallery = '<div class="gallery">';
$images = $page->gallery;
// add thumbnail to gallery
if(count($page->thumbnail)){
$gallery .= '<a class="chocolat-image gallery-item" href="'.$page->thumbnail->url.'"><img src="'. $page->thumbnail->getThumb('thumbnail') .'" title="'. $image->description .'"></a>';
}
foreach($images as $image){
$gallery .= '<a class="chocolat-image gallery-item" href="'.$image->url.'"><img src="'. $image->getThumb('thumbnail') .'" title="'. $image->description .'"></a> ';
}
$gallery .= '</div>';
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.
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>
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>
Nächste Seite
// add next button if there is another page next
if($page->next->id){
$next = '<div class="next"><i>Next:</i> <a class="ajax-link" name="'.$page->next->title.'" href="'. $page->next->url .'">'. $page->next->title .'<span class="fa fa-arrow-right"><span></a></div>';
}
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>
Seiten
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
// 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>
<?php
/**
* art list template
*
*/
$works = '<div class="gallery">';
$children = $page->children;
foreach($children as $child){
$works .= '<a class="ajax-link" parent="'. $child->parent->title .'" name="'.$child->title.'" href="'. $child->url. '">';
$works .= '<h2>'. $child->title . '</h2>';
if(count($child->thumbnail)){
$works .= '<div class="thumbnail"><img src="'. $child->thumbnail->getThumb('thumbnail') .'" title="'. $image->description .'"></div>';
}
$works .= '</a>';
}
$works .= '</div>';
$content = $page->body . $works . '<br/>' . $page->video;