ProcessWire - TimeTable (Layoutblock uikit)

Aus Wikizone
Wechseln zu: Navigation, Suche

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;