Add metadata support, fixes #210
Cette révision appartient à :
@ -2,21 +2,18 @@
|
||||
|
||||
class Content extends Entry
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
/** @var string */
|
||||
protected $content;
|
||||
|
||||
/**
|
||||
* @var Content
|
||||
*/
|
||||
/** @var Content */
|
||||
protected $previous;
|
||||
|
||||
/**
|
||||
* @var Content
|
||||
*/
|
||||
/** @var Content */
|
||||
protected $next;
|
||||
|
||||
/** @var array */
|
||||
protected $attributes;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
@ -26,6 +23,10 @@ class Content extends Entry
|
||||
$this->content = file_get_contents($this->getPath());
|
||||
}
|
||||
|
||||
if ($this->attributes === null) {
|
||||
$this->parseAttributes();
|
||||
}
|
||||
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
@ -74,6 +75,68 @@ class Content extends Entry
|
||||
return $this->name == 'index' || $this->name == '_index';
|
||||
}
|
||||
|
||||
public function getTitle()
|
||||
{
|
||||
if ($title = $this->getAttribute('title')) {
|
||||
return $title;
|
||||
}
|
||||
|
||||
return parent::getTitle();
|
||||
}
|
||||
|
||||
protected function parseAttributes()
|
||||
{
|
||||
// We set an empty array first to
|
||||
// avoid a loop when "parseAttributes"
|
||||
// is called in "getContent"
|
||||
$this->attributes = [];
|
||||
|
||||
$content = $this->getContent();
|
||||
$sections = preg_split('/\s+-{3,}\s+/', $content, 2);
|
||||
|
||||
// Only do it if we have two sections
|
||||
if (count($sections) != 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Parse the different attributes
|
||||
$lines = preg_split('/\n/', $sections[0]);
|
||||
foreach ($lines as $line) {
|
||||
$parts = preg_split('/:/', $line, 2);
|
||||
if (count($parts) !== 2) continue;
|
||||
$key = strtolower(trim($parts[0]));
|
||||
$value = trim($parts[1]);
|
||||
$this->attributes[$key] = $value;
|
||||
}
|
||||
|
||||
// Only remove the content if we have at least one attribute
|
||||
if (count($this->attributes) > 0) {
|
||||
$this->setContent($sections[1]);
|
||||
}
|
||||
}
|
||||
|
||||
public function setAttributes(array $attributes)
|
||||
{
|
||||
$this->attributes = $attributes;
|
||||
}
|
||||
|
||||
public function getAttribute($key = null)
|
||||
{
|
||||
if ($this->attributes === null) {
|
||||
$this->parseAttributes();
|
||||
}
|
||||
|
||||
if (is_null($key)) {
|
||||
return $this->attributes;
|
||||
}
|
||||
|
||||
if (!array_key_exists($key, $this->attributes)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->attributes[$key];
|
||||
}
|
||||
|
||||
public function dump()
|
||||
{
|
||||
$dump = parent::dump();
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur