ProcessWire - TimeTable (Layoutblock uikit)
Aus Wikizone
Responsiver Wochenplan für Namaste Yoga (10/2018)
Klassen sind für uikit 3 ausgelegt.
<?php namespace ProcessWire;
/* Timetable Field v0.1 */
// Init
$content = '';
$sectionClasses = array('uk-section');
$sectionStyles = array();
$sectionClassesMarkup = '';
$sectionStylesMarkup = '';
$containerClasses = array('uk-container'); // content container not box-container
$containerClassesMarkup = '';
$gridClasses = array();
$colClasses = array();
// fill column array
//$colName = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'); // dayvalue->item...
$colName = array();
$timetable = array();
// Section Classes
if($page->section_style) $sectionClasses[] = $page->section_style->value;
if($page->section_size) $sectionClasses[] = $page->section_size->value;
if($page->no_space_top) $sectionClasses[] = "uk-padding-remove-top";
if($page->no_space_bottom) $sectionClasses[] = "uk-padding-remove-bottom";
// Inner Container Classes
if($page->uk_container_size) $containerClasses[] = $page->uk_container_size->value;
// BOXED SECTION (OUTER CONTAINER)
if($page->section_boxed){
// add outer container
$outerWrap = '<div class="uk-container">|</div>';
$gridClasses[] = 'uk-margin-remove';
$colClasses[] = 'uk-padding';
}
// FIXED WIDTH
$page->fixed_width ? $outerWrap = '<div class="'.$page->fixed_width->value.'">|</div>' : $outerWrap = '|';
// CONTENT
// get colnames from field 'day' todo get name automatically
foreach( explode("\n",$fields->get('t_timetable')->data['col4options']) as $line ){
if(!strpos($line, '=')) continue;
list($property, $setting) = explode('=', $line, 2);
$colName[trim($property)] = trim($setting);
}
//var_dump($colName);
// Copy Items in array
foreach($page->t_timetable as $item){ // each item is a course
$timetable[$colName[intval($item->day)]][] = $item;
}
//var_dump($timetable);
$c = 0;
foreach($timetable as $key=>$val){ // each day
$itemsMarkup = '';
//var_dump($key);
$dayMarkup = '
<div class="uk-tile uk-tile-secondary uk-padding-small uk-margin-small uk-text-center">
<h4 class="h-'.$key.'">'.$key.'</h4>
</div>
';
foreach($val as $item){
//var_dump($item);
$timeMarkup = '';
$timeWrap = '<p class="uk-margin-remove-top"><i>|</i></p>';
if ($item->time) $timeMarkup .= $item->time;
if ($item->time_end) $timeMarkup .= ' -'.$item->time_end;
if (!empty($timeMarkup)) $timeMarkup = wrap($timeMarkup,$timeWrap);
$description = wrap(nl2br($item->description),'<div class="description">|</div>');
$info = wrap(nl2br($item->info),'<div class="info">|</div>');
$itemsMarkup .= '
<div class="uk-tile uk-tile-primary uk-padding-small uk-margin-small uk-text-center">
<h4 class="uk-margin-remove-bottom">'.$item->title.'</h4>
'.$timeMarkup.'
'.$description.'
'.$info.'
</div>';
}
$itemsMarkup = $dayMarkup.$itemsMarkup;
$itemsMarkup = wrap($itemsMarkup,'<td class="col-'.$c.'">|</td>');
$content .= $itemsMarkup;
$c++;
}
//var_dump($content);
$content = wrap($content,'<div class="uk-overflow-auto"><table class="timetable uk-table uk-table-small uk-table-responsive uk-table-justify"><tbody><tr>|</tbody></table></div>');
// CREATE MARKUP
$sectionClassesMarkup = implode(' ',$sectionClasses);
$sectionStylesMarkup = implode(' ',$sectionStyles);
$containerClassesMarkup = implode(' ',$containerClasses);
$gridClasses[] = 'uk-grid';
$gridClassesMarkup = implode(' ',$gridClasses);
$colClasses[] = 'uk-width-1-1';
$colClassesMarkup = implode(' ',$colClasses);
// Put things together
$content = wrap($content,$outerWrap);
$out = '';
$out .= "
<div class=\"$sectionClassesMarkup\" style=\"$sectionStylesMarkup\">
<div class=\"$containerClassesMarkup\">
<div class=\"$gridClassesMarkup\">
<div class=\"$colClassesMarkup\">
$content
</div>
</div>
</div>
</div>
";
$out = wrap($out,$outerWrap);
return $out;