Files
shopPRO/autoload/front/Views/Articles.php

242 lines
5.7 KiB
PHP

<?php
namespace front\Views;
class Articles
{
/**
* Renderuje pelny widok pojedynczego artykulu.
*/
public static function fullArticle( $article )
{
$tpl = new \Shared\Tpl\Tpl;
$tpl->article = $article;
return $tpl->render( 'articles/article' );
}
/**
* Renderuje liste artykulow w trybie miniaturek z pagerem.
*/
public static function miniatureArticlesList( $articles, $ls, $bs, $page )
{
$out = '';
if ( is_array( $articles ) ) foreach ( $articles as $article )
{
$tpl = new \Shared\Tpl\Tpl;
$tpl->article = $article;
$out .= $tpl->render( 'articles/article-miniature' );
}
if ( $ls > 1 )
{
$tpl = new \Shared\Tpl\Tpl;
$tpl->ls = $ls;
$tpl->bs = $bs ? $bs : 1;
$tpl->page = $page;
$out .= $tpl->render( 'site/pager' );
}
return $out;
}
/**
* Renderuje liste artykulow w trybie wprowadzen z pagerem.
*/
public static function entryArticlesList( $articles, $ls, $bs, $page )
{
$tpl = new \Shared\Tpl\Tpl;
$tpl->page_id = $page['id'];
$tpl->articles = $articles;
$out = $tpl->render( 'articles/articles-entries' );
if ( $ls > 1 )
{
$tpl = new \Shared\Tpl\Tpl;
$tpl->ls = $ls;
$tpl->bs = $bs ? $bs : 1;
$tpl->page = $page;
$out .= $tpl->render( 'site/pager' );
}
return $out;
}
/**
* Renderuje liste pelnych artykulow z pagerem.
*/
public static function fullArticlesList( $articles, $ls, $bs, $page )
{
$out = '';
if ( is_array( $articles ) ) foreach ( $articles as $article )
{
$tpl = new \Shared\Tpl\Tpl;
$tpl->article = $article;
$out .= $tpl->render( 'articles/article-full' );
}
if ( $ls > 1 )
{
$tpl = new \Shared\Tpl\Tpl;
$tpl->ls = $ls;
$tpl->bs = $bs ? $bs : 1;
$tpl->page = $page;
$out .= $tpl->render( 'site/pager' );
}
return $out;
}
/**
* Renderuje box z aktualnosciami.
*/
public static function news( $page_id, $articles )
{
$tpl = new \Shared\Tpl\Tpl;
$tpl->page_id = $page_id;
$tpl->articles = $articles;
return $tpl->render( 'articles/news' );
}
/**
* Renderuje prosta liste artykulow (news-list).
*/
public static function newsList( $articles )
{
return \Shared\Tpl\Tpl::view( 'articles/news-list', [
'articles' => $articles
] );
}
// =========================================================================
// UTILITY (czyste transformacje HTML, brak DB)
// =========================================================================
/**
* Generuje spis tresci z naglowkow HTML.
*/
public static function generateTableOfContents( $content )
{
$result = '';
$currentLevel = [];
preg_match_all( '/<(h[1-6])([^>]*)>(.*?)<\/\1>/', $content, $matches, PREG_SET_ORDER );
$firstLevel = true;
foreach ( $matches as $match )
{
$level = intval( substr( $match[1], 1 ) );
while ( $level < count( $currentLevel ) )
{
$result .= '</li></ol>';
array_pop( $currentLevel );
}
if ( $level > count( $currentLevel ) )
{
while ( $level > count( $currentLevel ) )
{
if ( count( $currentLevel ) > 0 || $firstLevel )
{
$result .= '<ol>';
$firstLevel = false;
}
array_push( $currentLevel, 0 );
}
$result .= '<li>';
}
else
{
$result .= '</li><li>';
}
$currentLevel[ count( $currentLevel ) - 1 ]++;
preg_match( '/\sid="([^"]*)"/', $match[2], $idMatches );
$id = isset( $idMatches[1] ) ? $idMatches[1] : '';
$result .= sprintf(
'<a href="#%s">%s</a>',
urlencode( strtolower( $id ) ),
$match[3]
);
}
while ( !empty( $currentLevel ) )
{
$result .= '</li></ol>';
array_pop( $currentLevel );
}
if ( substr( $result, 0, 8 ) === '<ol><ol>' )
return substr( $result, 4, -5 );
else
return $result;
}
/**
* Callback dla processHeaders.
*/
public static function processHeaders( $matches )
{
$level = $matches[1];
$attrs = $matches[2];
$content = $matches[3];
$id_attr = 'id=';
$id_attr_pos = strpos( $attrs, $id_attr );
if ( $id_attr_pos === false )
{
$id = \Shared\Helpers\Helpers::seo( $content );
$attrs .= sprintf( ' id="%s"', $id );
}
return sprintf( '<h%d%s>%s</h%d>', $level, $attrs, $content, $level );
}
/**
* Dodaje atrybuty id do naglowkow HTML.
*/
public static function generateHeadersIds( $text )
{
$pattern = '/<h([1-6])(.*?)>(.*?)<\/h\1>/si';
$text = preg_replace_callback( $pattern, array( __CLASS__, 'processHeaders' ), $text );
return $text;
}
/**
* Pobiera glowne zdjecie artykulu (z entry, text lub galerii).
*/
public static function getImage( $article )
{
if ( $main_img = $article['language']['main_image'] )
return $main_img;
$dom = new \DOMDocument();
@$dom->loadHTML( mb_convert_encoding( $article['language']['entry'], 'HTML-ENTITIES', 'UTF-8' ) );
$images = $dom->getElementsByTagName( 'img' );
foreach ( $images as $img )
{
$src = $img->getAttribute( 'src' );
if ( file_exists( substr( $src, 1, strlen( $src ) ) ) )
return $src;
}
$dom = new \DOMDocument();
@$dom->loadHTML( mb_convert_encoding( $article['language']['text'], 'HTML-ENTITIES', 'UTF-8' ) );
$images = $dom->getElementsByTagName( 'img' );
foreach ( $images as $img )
{
$src = $img->getAttribute( 'src' );
if ( file_exists( substr( $src, 1, strlen( $src ) ) ) )
return $src;
}
if ( $article['images'] )
return $article['images'][0]['src'];
return false;
}
}