<?php
// J:\awww\www\fwphp\glomodul\blog\Home.php
// caled from Home_ ctr so : Home::displ($pp1) ;
//https://startbootstrap.com/template/blog-post https://startbootstrap.com/previews/blog-post
//https://getbootstrap.com/docs/5.1/components/collapse/
declare(strict_types=1); //declare(strict_types=1, encoding='UTF-8');
namespace B12phpfw\module\blog ;
//use B12phpfw\core\b12phpfw\Db_allsites_Intf ;
//use B12phpfw\core\b12phpfw\Db_allsites as utldb ; //(NOT HARD CODED) SHARED DBADAPTER
use B12phpfw\core\b12phpfw\Config_allsites as utl ; // init, setings, utilities
use B12phpfw\dbadapter\post\Tbl_crud as Tbl_crud_post ;
use B12phpfw\dbadapter\post_comment\Tbl_crud as Tbl_crud_post_comment ;
use B12phpfw\module\blog\Home as Home_view;
use B12phpfw\module\blog\Side_area as Side_view;
class Home extends utl
{
//Db_allsites_ORA or Db_allsites for MySql or ... :
static protected $utldb ; // OBJECT VARIABLE OF (NOT HARD CODED) SHARED DBADAPTER
//self is used to access static or class variables or methods
//this is used to access non-static or object variables or methods
public function __construct(object &$pp1) { //, Db_allsites_Intf $utldb
$pp1->stack_trace[]=str_replace('\\','/', __METHOD__ ).', lin='.__LINE__ ;
}
static public function navbar_top( object $pp1, array $other ): string
{
$pp1->stack_trace[]=str_replace('\\','/', __METHOD__ ).', lin='.__LINE__ ;
if ('') { //if ($module_ arr['dbg']) {
echo '<h3>'. __METHOD__ .'() '.', line '. __LINE__ .' said: '.'</h3>' ;
echo '<pre style="font-family:\'Lucida Console\'; font-size:small">';
echo '<b>$pp1</b>='; print_r($pp1);
//echo '<br><b>$_POST</b>='; print_r($_POST);
echo '</pre>'; }
?>
<!-- -->
<div class="hero" data-theme="dark">
<nav class="container-fluid">
<ul>
<li><a href="<?=$pp1->sitehome?>" class="contrast"><strong>Sitehome</strong></a></li>
</ul>
<ul>
<?php //if(empty($_SESSION['username'])) { ?>
<li><a title="Paginated posts with summary" class="contrast" href="index.php">Home</a></li>
<li><a title="" class="contrast" href="<?=$pp1->kalendar?>">Calendar</a></li>
<li><a title="" class="contrast" href="<?=$pp1->about?>">About</a></li>
<li><a title="" class="contrast" href="<?=$pp1->features?>">Module</a></li>
<li><a title="" class="contrast" href="<?=$pp1->contact?>">Contact</a></li>
<?php //} ?>
<?php if(!empty($_SESSION['username'])){ ?>
<li><a title="Posts" class="contrast"
href="<?=$pp1->posts?>">Dashboard</a></li>
<li><a class="contrast" href="<?=$pp1->logout?>">Logout</a></li>
<?php }else{ ?>
<li><a class="contrast" href="<?=$pp1->login?>">Login</a></li>
<?php } ?>
</ul>
</nav>
</div><!-- ./ Hero -->
<!-- N AVBAR END -->
<?php
return('1') ;
} //e n d f n n a v b a r
static public function displ_tbl( object &$pp1, array $other ): string
{
$pp1->stack_trace[]=str_replace('\\','/', __METHOD__ ).', lin='.__LINE__ ;
if (isset($pp1->shared_dbadapter_obj)) self::$utldb = $pp1->shared_dbadapter_obj ;
if (isset($pp1->category_from_url)) $category_from_url = $pp1->category_from_url ;
else $category_from_url = '' ;
if ('') //if ($autoload_arr['dbg'])
{ echo '<h2>'.__METHOD__ .'() '.', line '. __LINE__ .' SAYS: '.'</h2>' ;
echo '<pre>' ;
//echo '<br />$ u r i q='; print_r($pp1->uriq) ;
//echo '<br />$_POST='; print_r($_POST) ;
echo '<br />$pp1='; print_r($pp1) ;
//echo 'ses fltr pg ='; print_r($_SESSION['filter_posts']) ;
//echo 'For pagination (not for c o u n t !!) $qrywhere='; print_r($qrywhere) ;
//echo '<br />$binds='; print_r($binds) ;
//echo '<br /><span style="color: violet; font-size: large; font-weight: bold;">Loading script of cls $nsclsname='.$nsclsname.'</span>'
//exit(0) ;
echo '</pre>'; }
//P A G I N A T O R step 2. is click page in n avbar, read page (step 1. Create navigation bar)
//if (isset($pp1->uriq->p) and null !== $pp1->uriq->p) {
if (isset($pp1->urlqry_parts[3]) and null !== $pp1->urlqry_parts[3]) {
$_SESSION['filter_posts']['pgordno_from_url'] = (int)$pp1->urlqry_parts[3] ;
} else {
if (!isset($_SESSION['filter_posts']['pgordno_from_url'])) {
$_SESSION['filter_posts']['pgordno_from_url'] = 1 ;
}
}
if (isset($pp1->uriq->c) and null !== $pp1->uriq->c) {
$_SESSION['filter_posts']['category_from_url'] = $pp1->uriq->c ;
$_SESSION['filter_posts']['pgordno_from_url'] = 1 ;
} else {
if (!isset($_SESSION['filter_posts']['category_from_url'])) {
$_SESSION['filter_posts']['category_from_url'] = '' ;
}
}
if ( isset($_POST["SearchButton"]) and isset($_POST["Search"])
) {
$_SESSION['filter_posts']['search_from_submit'] = $_POST["Search"] ;
$_SESSION['filter_posts']['pgordno_from_url'] = 1 ;
} else {
if (!isset($_SESSION['filter_posts']['search_from_submit'])) {
$_SESSION['filter_posts']['search_from_submit'] = '' ;
}
}
// 3 types of filter :
$pgordno_from_url = $_SESSION['filter_posts']['pgordno_from_url'] ;
$category_from_url = $_SESSION['filter_posts']['category_from_url'] ;
$search_from_submit = $_SESSION['filter_posts']['search_from_submit'] ; //from $_POST
if($pgordno_from_url == 0 or $pgordno_from_url < 1){ $row_ordno = 0;
} else{ $row_ordno = ($pgordno_from_url * $pp1->rblk) - $pp1->rblk; }
$qrywhere = "'1'='1'" ;
$binds = [] ;
if( $search_from_submit )
{
$qrywhere .= " and (title LIKE :search1
OR category LIKE :search2
OR datetime LIKE :search3
OR img_desc LIKE :search4
OR summary LIKE :search5
)" ; //OR post LIKE :search
$binds[]=['placeh'=>':search1', 'valph'=>'%'.$search_from_submit.'%', 'tip'=>'str'];
$binds[]=['placeh'=>':search2', 'valph'=>'%'.$search_from_submit.'%', 'tip'=>'str'];
$binds[]=['placeh'=>':search3', 'valph'=>'%'.$search_from_submit.'%', 'tip'=>'str'];
$binds[]=['placeh'=>':search4', 'valph'=>'%'.$search_from_submit.'%', 'tip'=>'str'];
$binds[]=['placeh'=>':search5', 'valph'=>'%'.$search_from_submit.'%', 'tip'=>'str'];
}
if( $category_from_url ) {
$qrywhere .= ' and category = :category_from_url' ;
$binds[] =['placeh'=>':category_from_url', 'valph'=>$category_from_url, 'tip'=>'str'];
}
if ('')
{ echo '<h2>'.__METHOD__ .'() '.', line '. __LINE__ .' SAYS: '.'</h2>' ;
echo '<pre>' ;
echo 'ses fltr pg ='; print_r($_SESSION['filter_posts']) ;
echo 'For c o u n t !! $qrywhere='; print_r($qrywhere) ;
echo '<br />$binds='; print_r($binds) ;
//echo '<br /><span style="color: violet; font-size: large; font-weight: bold;">Loading script of cls $nsclsname='.$nsclsname.'</span>'
echo '</pre>';
exit(0) ;
}
$rcnt_filtered_posts = Tbl_crud_post::rrcount( $pp1, $qrywhere, $binds, $other=
['caller' => __METHOD__ .' '.', ln '. __LINE__ ] ) ;
//P A G I N A T O R step 1. Create navigation bar (step 2. is click page in n avbar, read page)
$pgn_links = self::get_pgnnav($pp1->urlqry_parts, $rcnt_filtered_posts, 'i/home/', $pp1->rblk);
if ('') //if ($autoload_arr['dbg'])
{ echo '<h2>'.__METHOD__ .'() '.', line '. __LINE__ .' SAYS: '.'</h2>' ;
echo '<pre>' ;
echo '$pgn_links ='; print_r($pgn_links) ;
echo '</pre>';
exit(0) ;
}
//echo $pgn_links['navbar'];
$pgnnavbar = $pgn_links['navbar'];
$pgordno_from_url = (int)$pgn_links['pgordno_from_url'];
$first_rinblock = (int)$pgn_links['first_rinblock'];
$last_rinblock = (int)$pgn_links['last_rinblock'];
if( $pgordno_from_url ) {
$qrywhere .= " ORDER BY datetime desc LIMIT :first_rinblock, :rblk" ;
$binds[]=['placeh'=>':first_rinblock', 'valph'=>$row_ordno, 'tip'=>'int'];
$binds[]=['placeh'=>':rblk', 'valph'=>$pp1->rblk, 'tip'=>'int'];
}
if ('') //if ($autoload_arr['dbg'])
{ echo '<h2>'.__METHOD__ .'() '.', line '. __LINE__ .' SAYS: '.'</h2>' ;
echo '<pre>' ;
//shared_dbadapter_obj = B12phpfw\core\b12phpfw\Db_allsites Object
echo '$pp1 ='; print_r($pp1) ;
echo 'self::$utldb ='; print_r(self::$utldb) ;
echo '$pgn_links ='; print_r($pgn_links) ;
//echo 'ses filter_ posts ='; print_r($_SESSION['filter_posts']) ;
//echo 'For pagination (not for c o u n t !!) $qrywhere='; print_r($qrywhere) ;
//echo '<br />$binds='; print_r($binds) ;
////echo '<br /><span style="color: violet; font-size: large; font-weight: bold;">Loading script of cls $nsclsname='.$nsclsname.'</span>'
echo '</pre>'; }
self::$utldb::setdo_pgntion('1') ;
$cursor_posts = Tbl_crud_post::get_cursor( $pp1 // new in ver. 10.0.3.0
, $dmlrr='*'
, $qrywhere //="'1'='1'"
, $binds //=[]
, $other=['caller' => __METHOD__ .' '.', ln '. __LINE__ ] );
//$title = 'MSG HOME';
//require_once $pp1->shares_path . '/hdr.php'; //require $pp1->shares_path . '/hdr.php';
//Home_view::navbar_top($pp1, $other=['caller' => __FILE__ .' '.', ln '. __LINE__ ]);
//require_once("n avbar.php");
?>
<!-- Page content CENTER-->
<!-- Main -->
<main class="container">
<div class="grid">
<section>
<!-- Left pge content-->
<?php
self::show_pge_hdr( $pp1, $pgn_links ) ;
//, $category_from_url, $search_from_submit, $pgordno_from_url
$ordno = 0 ;
while ( $rx = Tbl_crud_post::rrnext( $cursor_posts // u tldb::r rnext
, $other=['caller' => __METHOD__ .' '.', ln '. __LINE__ ] ) and $rx->rexists ):
{
++$ordno ;
if ('') //if ($autoload_arr['dbg'])
{ echo '<h2>'.__METHOD__ .'() '.', line '. __LINE__ .' SAYS: '.'</h2>' ;
echo '<pre>' ;
echo '$rx='; print_r($rx) ;
//echo '<br /><span style="color: violet; font-size: large; font-weight: bold;">Loading script of cls $nsclsname='.$nsclsname.'</span>'
echo '</pre>';
}
?>
<!-- P o s t c o n t e n t class="text-muted fst-italic mb-2"-->
<?php
/*self::show_post_ttle($pp1, $rx, $first_rinblock, $ordno) ;
self::show_post_meta($pp1, $rx, $first_rinblock, $ordno) ;
self::show_post_summary($pp1, $rx) ;
self::show_post_img($pp1, $rx) ; */
?>
<div style="border: 1px solid rgb(51, 51, 51); padding: 12px 12px 0px; margin: 40px 0px 20px;">
<!-- ======================================
1. P o s t t i t l e
h3 style="margin: 0px; background: rgb(230, 243, 255) ; width: 100%; "
#93ACC8 #9394C8 #AFB7C8 lightblue lightgray, darkblue
=========================================== -->
<h5 style="margin: 0px; color: rgb(40, 109, 193); background: #93ACC8 ;
=========================================== -->;
width: 100%; ">
<?=self::escp($rx->title)?></h5>
<?php
//<!-- ======================================
//<!-- 2. P o s t m e t a c o n t e n t-->
// =========================================== -->
echo //'<br><br><br>'.
str_replace('!', " ",
//str_pad(
(string) ($first_rinblock + $ordno - 1)
// , 6, '!', STR_PAD_LEFT
//)
) .'. ' ;
?>
<!-- eg: Posted on January 1, 2021 by Start Bootstrap -->
<a href="<?=$pp1->filter_postcateg?><?=self::escp($rx->category)?>/p/1">
<?=self::escp($rx->category)?> </a>
Written by
<a href="<?=$pp1->read_user?>username/<?=self::escp($rx->author)?>">
<?=self::escp($rx->author)?></a>
On <a href="<?=$pp1->kalendar?>mm/<?=self::escp(substr($rx->datetime,0,7))?>"
title="Show all posts in post month"><?=self::escp($rx->datetime)?></a>
<?php
$qrywhere="post_id=:id AND status=:status" ;
$binds=[ ['placeh'=>':id', 'valph'=>$rx->id, 'tip'=>'int']
, ['placeh'=>':status', 'valph'=>'ON', 'tip'=>'str']
] ;
$rcnt_post_comments = Tbl_crud_post_comment::rrcount( $pp1, $qrywhere, $binds
, $other = ['caller' => __METHOD__ .' '.', ln '. __LINE__ ] ) ;
?>
<!-- Post categories or...-->
<!--a class="badge bg-secondary text-decoration-none link-light" href="#!"-->
<span> <!-- style="float:right;" class="badge badge-dark text-light" -->
Comments: <?=$rcnt_post_comments?>
</span>
<a href="<?=$pp1->read_post?>id/<?=$rx->id?>" >More</a>
<!-- e n d 2. P o s t m e t a c o n t e n t-->
<!-- ======================================
3. P o s t s u m m a r y
=========================================== -->
<div>
<?php
if ($rx->summary and $rx->summary > '') {
//echo '<h5>Article summary</h5>' ; // SUMMARY :
echo '<b>'. str_replace('{{b}}','<b>', str_replace('{{/b}}','</b>',
nl2br(self::escp($rx->summary))
)) .'</b>';
} else {
}
?>
</div>
<!-- e n d 3. a r t i c l e s u m m a r y
<!-- ======================================
4. P o s t i m a g e
=========================================== -->
<div id="clpsedTxt">
<div>
<br>
<?php
//J://awww//www//fwphp//glomodul//blog//Uploads//mvc_M_V_data_flow.jpg
//src="https://dummyimage.com/900x400/ced4da/6c757d.jpg"
$tmp_imgpath = str_replace('/',DS, __DIR__ .DS.'Uploads'.DS.self::escp(
(null == $rx->image ? 'NON EXISTENT' : $rx->image)
));
//$tmp_imgurlrel = 'Uploads/'.self::escp($rx->image) ;
$tmp_imgurlrel = '/vendor/b12phpfw/img/'.self::escp($rx->image) ;
//if (file_exists($tmp_imgpath))
{ ?>
<figure class="mb-4">
<img src="<?=$tmp_imgurlrel?>" class="img-fluid card-img-top"
title = "<?='$rx->image='. $rx->image .', $tmp_imgpath='
.$tmp_imgpath .', $tmp_imgurlrel='. $tmp_imgurlrel?>"
style="max-height:450px;"
alt="<?=$tmp_imgurlrel?>" />
</figure>
<?php
}
$tmp_imgpath = str_replace('/',DS, $pp1->shares_path
. 'img'.DS.'img_big'.DS.self::escp(
(null == $rx->image ? 'NON EXISTENT' : $rx->image)
) ) ;
$tmp_imgurlrel = '/vendor/b12phpfw/img/img_big/'.self::escp($rx->image) ;
if ('') {self::jsmsg( [ //b asename(__METHOD__).
__METHOD__ .', line '. __LINE__ .' SAYS'=>'BEFORE img '
,'$tmp_imgurlrel'=>$tmp_imgurlrel
] ) ; }
if ($rx->image and file_exists($tmp_imgpath)) { ?>
<img src="<?=$tmp_imgurlrel?>"
title = "<?='$rx->image='. $rx->image
.', $tmp_imgpath='.$tmp_imgpath .', $tmp_imgurlrel='. $tmp_imgurlrel?>"
style="width:100%;"
/><?php
} //<!-- e n d 3. a r t i c l e i m a g e -->
//<!-- 4. i m a g e d e s c r i p t i on -->
$tmptxt = self::escp($rx->img_desc) ;
//if ($rx->image and file_exists($tmp_imgpath))
if ($tmptxt > '')
{
//$lnklabel = substr(strstr(self::escp($rx->img_desc), '{{lnktxt}}'), 10,9) ;
?>
<div class="card-body">
<h5>Image description</h5>
<p><?php
echo str_replace('{{b}}','<b>', str_replace('{{/b}}','</b>',
//str_replace('{{href}}','<a href="', str_replace('{{/href}}','">'.$lnklabel.'</a>',
nl2br($tmptxt)
));
//echo '<br />('.__DIR__ .DS.'Uploads'.DS.$rx->image.')' ; ?>
</p>
</div><!-- e n d 4. i m a g e d e s c r i p t i on -->
<?php
} ?>
</div><!-- ***** e n d Content for collapse component ********** -->
</div> <!-- e n d c o l l a p s e -->
</div> <!-- e n d P o s t c o n t e n t -->
<?php
} endwhile;
echo $pgn_links['navbar'] ;
echo '<br><small class="text-muted">'. __METHOD__ .'</small>' ;
?>
<br>
</section>
<aside>
<?php
Side_view::displ_tbl( $pp1 //, $fltr_sort
, $category_from_url, $search_from_submit, $pgordno_from_url
, $other=['caller' => __METHOD__ .' '.', ln '. __LINE__ ]);
?>
</aside>
</div><!-- grid -->
</main><!-- Main -->
<!--no m ore : ftr.php script src="<=$pp1->wsroot_url?>zinc/exp_collapse.js"
language='JScript' type='text/javascript'>
</script-->
<?php
//require_once $pp1->shares_path . '/ftr.php';
return('1') ;
} //e n d f n s h o w
//<!-- CENTER END -->
/** *****************************
* V I E W S N I P P E T S
******************************* */
static private function show_pge_hdr( object $pp1
//, string $category_from_url, string $search_from_submit, int $pgordno_from_url
, array $pgn_links
)
{ ?>
<!-- P a g e h e a d e r header -->
<div>
<?php
//echo utl::M sgErr(); echo utl::M sgSuccess();
echo utl::msg_err_succ(__METHOD__ .' '.', ln '. __LINE__);
?>
<!-- 1. p a g e s u m m a r y -->
<?php
echo $pgn_links['navbar'];
?>
</div>
<?php
return('1') ;
} //e n d f n show_ pge_ hdr
} //e n d c l s
|