e107_themes/bootstrap5/theme.php
<?php
if(!defined('e107_INIT'))
{
exit();
}
class theme implements e_theme_render
{
public function init()
{
e107::lan('theme');
e107::meta('viewport', 'width=device-width, initial-scale=1.0'); // added to <head>
// e107::link('rel="preload" href="{THEME}fonts/myfont.woff2?v=2.2.0" as="font" type="font/woff2" crossorigin'); // added to <head>
// e107::meta('apple-mobile-web-app-capable','yes');
$login_iframe = e107::pref('theme', 'login_iframe', false);
if(THEME_LAYOUT === "splash" && $login_iframe)
{
define('e_IFRAME', '0');
}
}
/**
* Override how THEME_STYLE is loaded. Duplicates will be automatically removed.
* @return void
*/
function css()
{
e107::css('theme', THEME_STYLE);
e107::css('theme', 'style.css'); // always load style.css last.
e107::css('inline', '#carousel-hero.carousel { margin-bottom: 80px; }');
}
/**
* @param string $text
* @return string without p tags added always with bbcodes
* note: this solves W3C validation issue and CSS style problems
* use this carefully, mainly for custom menus, let decision on theme developers
*/
function remove_ptags($text = '') // FIXME this is a bug in e107 if this is required.
{
$text = str_replace(array("<!-- bbcode-html-start --><p>", "</p><!-- bbcode-html-end -->"), "", $text);
return $text;
}
function tablestyle($caption, $text, $mode='', $data = array())
{
$style = varset($data['setStyle'], 'default');
// Override style based on mode.
switch($mode)
{
case 'wmessage':
case 'wm':
$style = 'wmessage';
break;
case "login_page":
case "fpw":
case "coppa":
case "signup":
$style = 'splash';
break;
case 'news_months_menu':
$style = 'listgroup';
break;
}
echo "\n<!-- tablestyle initial: style=" . $style . " mode=" . $mode . " UniqueId=" . varset($data['uniqueId']) . " -->\n\n";
if($style === 'listgroup' && empty($data['list']))
{
$style = 'cardmenu';
}
if($style === 'cardmenu' && !empty($data['list']))
{
$style = 'listgroup';
}
/* Changing card look via prefs */
if(!e107::pref('theme', 'cardmenu_look') && $style == 'cardmenu')
{
$style = 'menu';
}
// echo "\n<!-- tablestyle: style=" . $style . " mode=" . $mode . " UniqueId=" . varset($options['uniqueId']) . " -->\n\n";
if(deftrue('e_DEBUG'))
{
echo "\n<!-- \n";
echo json_encode($data, JSON_PRETTY_PRINT);
echo "\n-->\n\n";
}
switch($style)
{
case 'wmessage':
echo '<div class="p-5"><div class="container text-center">';
if(!empty($caption))
{
echo '<h1 class="display-4">'.$caption.'</h1>';
}
echo '<p class="lead">'.$this->remove_ptags($text).'</p>';
echo '</div></div>';
break;
case 'bare':
echo $this->remove_ptags($text);
break;
case 'nocaption':
case 'main':
echo $text;
break;
case 'menu':
echo '<div class=" mb-4">';
if(!empty($caption))
{
echo '<h5>' . $caption . '</h5>';
}
echo $text;
echo '</div>';
break;
case 'cardmenu':
echo '<div class="card mb-4">';
if(!empty($caption))
{
echo '<h5 class="card-header">' . $caption . '</h5>';
}
echo '<div class="card-body">';
echo $text;
echo '</div>
</div>';
break;
case 'listgroup':
echo '<div class="card mb-4">';
if(!empty($caption))
{
echo '<h5 class="card-header">' . $caption . '</h5>';
}
echo $text;
if(!empty($data['footer'])) // XXX @see news-months menu.
{
echo '<div class="card-footer">
'.$data['footer'].'
</div>';
}
echo '</div>';
break;
case 'splash':
echo '<div class="container justify-content-center text-center my-5" id="'.$mode.'">
<div class="row align-items-center">
<div class="card card-signin col-md-6 offset-md-3 " id="login-template"><div class="card-body">';
if(!empty($caption))
{
echo '<h5 class="card-title text-center">' . $caption . '</h5>';
}
echo $text;
if(!empty($data['footer'])) // XXX @see news-months menu.
{
echo '<div class="card-footer">
'.$data['footer'].'
</div>';
}
echo '</div></div>
</div></div>';
break;
default:
// default style
// only if this always work, play with different styles
if(!empty($caption))
{
echo '<h4>' . $caption . '</h4>';
}
echo $text;
return;
}
}
}