"; } } /** all_breadcrumbs * ------------------------------------------------------------------------- * * returns an array of all breadcrumbs * where array-key of each record is category[id] * * NOTE: * --- * Render::all_breadcrumbs returns an indexed super-array; * each array item includes a banch of information: [ * breadcrumb, * rec: [ id , title ], * parents: [ [id, title] , ... ] * childs: [ [id, title] , ... ], * level * ] * * Use Cases: * --- * as a super-array, the output can be used in many cases * for example... * into form elements * .. while selecting category for a post * .. or editing a category * or directry referring to category's parents/childs * * Arguments: * --- * @param $tree (array) : category tree (with childs and parents parts) * @param $detimiter (string, optional) : string to split breadcrumb's path-nodes * @param $exception (int, optional) : id of category to exclude (subcategories shall be excluded too) * @param $l (int, not-pass) : depth level of the node; DO NOT SET (takes values automaticaly) * @return array of breadcrumbs * ------------------------------------------------------------------------- */ static public function all_breadcrumbs($tree, $delimiter = " / ", $exception = 0, $l = 0) { $all = []; // results array foreach($tree as $node) { // loop through all nodes if (intval($node['rec']['id']) != $exception) { // if node is not exception // construct breadcrumb html of node // --- -- -- - - - $breadcrumb = ""; foreach($node['parents'] as $par) { // first: join path titles $breadcrumb .= $par['title'] . $delimiter; } $breadcrumb .= $node['rec']['title']; // last: append title // make a new super record // --- -- -- - - - $all[$node['rec']['id']] = [ // set record is as key 'breadcrumb' => $breadcrumb, // add breadcrump to results 'rec' => $node['rec'], // + node info 'parents' => $node['parents'], // + parents array 'childs' => self::first_level_childs($node), // + direct childs 'level' => $l // + level ]; // recursively traverse children nodes // --- -- -- - - - if (isset($node['childs']) && $node['childs'] != []) { $child_breadcrumbs = self::all_breadcrumbs( $node['childs'], $delimiter, $exception, $l+1 ); $all = $all + $child_breadcrumbs; // concatenate arrays (keep array-keys) } } } return $all; } /** first_level_childs * --- -- -- - - - * used by all_breadcrumbs() */ static private function first_level_childs($node) { $childs = []; if ($node['childs'] == []) { return []; } foreach($node['childs'] as $key => $kid) { $childs[] = [ 'id' => $kid['rec']['id'], 'title' => $kid['rec']['title'] ]; } return $childs; } /** date_box * creates a pretty date box; outputs greek months * * @param $date (string) in 'Y-m-d H:i:s' format * @return html (string) of the date-box */ static public function date_box($date) { $months_Gr = ['', 'Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μάι', 'Ιουν', 'Ιουλ', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ' ]; $date = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $date); $day = $date->format("j"); $month = $months_Gr[intval($date->format("m"))]; $year = $date->format("Y"); // print_r([$date, $day, $month, $year]); die(); return "

{$day}

{$month}

{$year}

"; } /** date_friendly * outputs an unformated greek-language date string * * @param $date (string) in 'Y-m-d H:i:s' format */ static public function date_friendly($date, $display_time = false) { $months_Gr = ['', 'Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μάι', 'Ιουν', 'Ιουλ', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ' ]; $date = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $date); $day = $date->format("j"); $month = $months_Gr[intval($date->format("m"))]; $year = $date->format("Y"); $time = ($display_time) ? $date->format("H:i") : ''; return "{$day} {$month} {$year} {$time}"; } }