mirror of https://github.com/xfarrow/phpxpress.git
breadcrumb
This commit is contained in:
parent
dbf55c4c5b
commit
8f542ffd02
|
@ -0,0 +1,20 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Card example</title>
|
||||
</head>
|
||||
<body>
|
||||
<?php
|
||||
include "../phpxpress/breadcrumb.php";
|
||||
|
||||
$links["Github"] = "https://www.github.com";
|
||||
$links["xfarrow"] = "https://www.github.com/xfarrow";
|
||||
$links["PhpXpress"] = "https://www.github.com/xfarrow/phoxpress";
|
||||
|
||||
$breadcrumb = new BreadCrumb;
|
||||
|
||||
$breadcrumb->setDataSource($links);
|
||||
$breadcrumb->draw();
|
||||
|
||||
?>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,94 @@
|
|||
<?php
|
||||
|
||||
include "include.php";
|
||||
|
||||
class BreadCrumb{
|
||||
|
||||
private $locations;
|
||||
|
||||
// unless otherwise specified via stating 'setActiveLocation(-1)'
|
||||
// the active location will be the last element
|
||||
private $activeLocation;
|
||||
|
||||
// unless otherwise specified, the divider character will be: "/"
|
||||
private $divider;
|
||||
|
||||
/*
|
||||
** The datasource must be an associative array.
|
||||
** array("Home" => "xyz.com/home" , "Starred" => "xyz.com/home/starred", "Reading" => "xyz.com/home/starred/reading");
|
||||
** Will produce:
|
||||
** Home / Starred / Reading
|
||||
*/
|
||||
function setDataSource($dataSource){
|
||||
if(!is_array($dataSource))
|
||||
throw new InvalidArgumentException('Parameter dataSource must be an array.');
|
||||
|
||||
foreach($dataSource as $caption => $link){
|
||||
$this->addElement($caption, $link);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Adds an element at the end of the Breadcrumb
|
||||
*/
|
||||
function addElement($caption, $link){
|
||||
|
||||
if(isset($this->locations))
|
||||
$this->locations[$caption] = $link;
|
||||
|
||||
else
|
||||
$this->locations = array($caption => $link);
|
||||
|
||||
$this->activeLocation = $caption;
|
||||
}
|
||||
|
||||
/*
|
||||
** You can specify either a scalar (the (n-1)th to be activated)
|
||||
** or a string (the caption to be activated)
|
||||
*/
|
||||
function setActiveLocation($activeLocation){
|
||||
|
||||
if(!is_scalar($activeLocation) && !is_string($activeLocation))
|
||||
throw new InvalidArgumentException('Parameter activeLocation can be either an int or a string. None of these provided.');
|
||||
|
||||
$this->activeLocation = $activeLocation;
|
||||
}
|
||||
|
||||
function setDivider($divider){
|
||||
$this->divider = $divider;
|
||||
}
|
||||
|
||||
function draw(){
|
||||
|
||||
$iterator = 0;
|
||||
|
||||
if(!isset($this->divider))
|
||||
echo '<nav aria-label="breadcrumb">';
|
||||
else
|
||||
echo '<nav style="--bs-breadcrumb-divider: \'' . $this->divider . '\';" aria-label="breadcrumb">';
|
||||
|
||||
echo '<ol class="breadcrumb">';
|
||||
|
||||
foreach($this->locations as $caption => $link){
|
||||
|
||||
// active location
|
||||
if(
|
||||
(is_int($this->activeLocation) && $this->activeLocation == $iterator)
|
||||
|| (is_string($this->activeLocation) && $this->activeLocation == $caption)
|
||||
){
|
||||
echo '<li class="breadcrumb-item active" aria-current="page">' . $caption . '</li>';
|
||||
}
|
||||
|
||||
// non active location
|
||||
else{
|
||||
echo '<li class="breadcrumb-item">';
|
||||
echo '<a href="' . $link . '">' . $caption;
|
||||
echo '</a></li>';
|
||||
}
|
||||
|
||||
$iterator++;
|
||||
}
|
||||
echo '</ol></nav>';
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -68,7 +68,7 @@
|
|||
}
|
||||
|
||||
function setDataSource($datasource){
|
||||
foreach($datasource as $caption=>$value){
|
||||
foreach($datasource as $caption => $value){
|
||||
$this->addField($caption,$value);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,11 +54,11 @@
|
|||
$this->dataSource = $dataSource;
|
||||
|
||||
// if array of objects provided
|
||||
if(is_object($this->dataSource[0]))
|
||||
if(is_object($dataSource[0]))
|
||||
$this->columnCaptions = array_keys(get_object_vars($this->dataSource[0]));
|
||||
|
||||
// if array of arrays provided
|
||||
else
|
||||
else if(is_array($dataSource[0]))
|
||||
$this->columnCaptions = array_keys($this->dataSource[0]);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue