Custom fields
This commit is contained in:
parent
2e44c6fd8c
commit
cc73f609e4
|
@ -89,6 +89,9 @@ echo Bootstrap::formOpen(array(
|
||||||
<div class="nav nav-tabs" id="nav-tab" role="tablist">
|
<div class="nav nav-tabs" id="nav-tab" role="tablist">
|
||||||
<a class="nav-link active show" id="nav-general-tab" data-toggle="tab" href="#nav-general" role="tab" aria-controls="general"><?php $L->p('General') ?></a>
|
<a class="nav-link active show" id="nav-general-tab" data-toggle="tab" href="#nav-general" role="tab" aria-controls="general"><?php $L->p('General') ?></a>
|
||||||
<a class="nav-link" id="nav-advanced-tab" data-toggle="tab" href="#nav-advanced" role="tab" aria-controls="advanced"><?php $L->p('Advanced') ?></a>
|
<a class="nav-link" id="nav-advanced-tab" data-toggle="tab" href="#nav-advanced" role="tab" aria-controls="advanced"><?php $L->p('Advanced') ?></a>
|
||||||
|
<?php if ($site->customFields()!="{}"): ?>
|
||||||
|
<a class="nav-link" id="nav-custom-tab" data-toggle="tab" href="#nav-custom" role="tab" aria-controls="custom"><?php $L->p('Custom') ?></a>
|
||||||
|
<?php endif ?>
|
||||||
<a class="nav-link" id="nav-seo-tab" data-toggle="tab" href="#nav-seo" role="tab" aria-controls="seo"><?php $L->p('SEO') ?></a>
|
<a class="nav-link" id="nav-seo-tab" data-toggle="tab" href="#nav-seo" role="tab" aria-controls="seo"><?php $L->p('SEO') ?></a>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -284,6 +287,27 @@ echo Bootstrap::formOpen(array(
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<?php if ($site->customFields()!="{}"): ?>
|
||||||
|
<div id="nav-custom" class="tab-pane fade" role="tabpanel" aria-labelledby="custom-tab">
|
||||||
|
<?php
|
||||||
|
$customFields = json_decode($site->customFields(), true);
|
||||||
|
foreach($customFields as $field=>$options) {
|
||||||
|
if ($options['type']=="string") {
|
||||||
|
echo Bootstrap::formInputTextBlock(array(
|
||||||
|
'name'=>'custom['.$field.']',
|
||||||
|
'value'=>(isset($options['default'])?$options['default']:''),
|
||||||
|
'tip'=>(isset($options['tip'])?$options['tip']:''),
|
||||||
|
'label'=>(isset($options['label'])?$options['label']:''),
|
||||||
|
'placeholder'=>(isset($options['placeholder'])?$options['placeholder']:''),
|
||||||
|
'value'=>$page->custom($field)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
<div id="nav-seo" class="tab-pane fade" role="tabpanel" aria-labelledby="seo-tab">
|
<div id="nav-seo" class="tab-pane fade" role="tabpanel" aria-labelledby="seo-tab">
|
||||||
<?php
|
<?php
|
||||||
// Friendly URL
|
// Friendly URL
|
||||||
|
|
|
@ -79,6 +79,9 @@ echo Bootstrap::formOpen(array(
|
||||||
<div class="nav nav-tabs" id="nav-tab" role="tablist">
|
<div class="nav nav-tabs" id="nav-tab" role="tablist">
|
||||||
<a class="nav-link active show" id="nav-general-tab" data-toggle="tab" href="#nav-general" role="tab" aria-controls="general"><?php $L->p('General') ?></a>
|
<a class="nav-link active show" id="nav-general-tab" data-toggle="tab" href="#nav-general" role="tab" aria-controls="general"><?php $L->p('General') ?></a>
|
||||||
<a class="nav-link" id="nav-advanced-tab" data-toggle="tab" href="#nav-advanced" role="tab" aria-controls="advanced"><?php $L->p('Advanced') ?></a>
|
<a class="nav-link" id="nav-advanced-tab" data-toggle="tab" href="#nav-advanced" role="tab" aria-controls="advanced"><?php $L->p('Advanced') ?></a>
|
||||||
|
<?php if ($site->customFields()!="{}"): ?>
|
||||||
|
<a class="nav-link" id="nav-custom-tab" data-toggle="tab" href="#nav-custom" role="tab" aria-controls="custom"><?php $L->p('Custom') ?></a>
|
||||||
|
<?php endif ?>
|
||||||
<a class="nav-link" id="nav-seo-tab" data-toggle="tab" href="#nav-seo" role="tab" aria-controls="seo"><?php $L->p('SEO') ?></a>
|
<a class="nav-link" id="nav-seo-tab" data-toggle="tab" href="#nav-seo" role="tab" aria-controls="seo"><?php $L->p('SEO') ?></a>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -260,6 +263,24 @@ echo Bootstrap::formOpen(array(
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
|
<?php if ($site->customFields()!="{}"): ?>
|
||||||
|
<div id="nav-custom" class="tab-pane fade" role="tabpanel" aria-labelledby="custom-tab">
|
||||||
|
<?php
|
||||||
|
$customFields = json_decode($site->customFields(), true);
|
||||||
|
foreach($customFields as $field=>$options) {
|
||||||
|
if ($options['type']=="string") {
|
||||||
|
echo Bootstrap::formInputTextBlock(array(
|
||||||
|
'name'=>'custom['.$field.']',
|
||||||
|
'value'=>(isset($options['default'])?$options['default']:''),
|
||||||
|
'tip'=>(isset($options['tip'])?$options['tip']:''),
|
||||||
|
'label'=>(isset($options['label'])?$options['label']:''),
|
||||||
|
'placeholder'=>(isset($options['placeholder'])?$options['placeholder']:'')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
<div id="nav-seo" class="tab-pane fade" role="tabpanel" aria-labelledby="seo-tab">
|
<div id="nav-seo" class="tab-pane fade" role="tabpanel" aria-labelledby="seo-tab">
|
||||||
<?php
|
<?php
|
||||||
// Friendly URL
|
// Friendly URL
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
<a class="nav-item nav-link" id="nav-social-tab" data-toggle="tab" href="#social" role="tab" aria-controls="nav-social" aria-selected="false"><?php $L->p('Social Networks') ?></a>
|
<a class="nav-item nav-link" id="nav-social-tab" data-toggle="tab" href="#social" role="tab" aria-controls="nav-social" aria-selected="false"><?php $L->p('Social Networks') ?></a>
|
||||||
<a class="nav-item nav-link" id="nav-images-tab" data-toggle="tab" href="#images" role="tab" aria-controls="nav-images" aria-selected="false"><?php $L->p('Images') ?></a>
|
<a class="nav-item nav-link" id="nav-images-tab" data-toggle="tab" href="#images" role="tab" aria-controls="nav-images" aria-selected="false"><?php $L->p('Images') ?></a>
|
||||||
<a class="nav-item nav-link" id="nav-language-tab" data-toggle="tab" href="#language" role="tab" aria-controls="nav-language" aria-selected="false"><?php $L->p('Language') ?></a>
|
<a class="nav-item nav-link" id="nav-language-tab" data-toggle="tab" href="#language" role="tab" aria-controls="nav-language" aria-selected="false"><?php $L->p('Language') ?></a>
|
||||||
<a class="nav-item nav-link" id="nav-language-tab" data-toggle="tab" href="#logo" role="tab" aria-controls="nav-logo" aria-selected="false"><?php $L->p('Logo') ?></a>
|
<a class="nav-item nav-link" id="nav-custom-fields-tab" data-toggle="tab" href="#custom-fields" role="tab" aria-controls="nav-custom-fields" aria-selected="false"><?php $L->p('Custom fields') ?></a>
|
||||||
|
<a class="nav-item nav-link" id="nav-logo-tab" data-toggle="tab" href="#logo" role="tab" aria-controls="nav-logo" aria-selected="false"><?php $L->p('Logo') ?></a>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
@ -433,6 +434,15 @@
|
||||||
'placeholder'=>'',
|
'placeholder'=>'',
|
||||||
'tip'=>''
|
'tip'=>''
|
||||||
));
|
));
|
||||||
|
|
||||||
|
echo Bootstrap::formInputText(array(
|
||||||
|
'name'=>'dribbble',
|
||||||
|
'label'=>'Dribbble',
|
||||||
|
'value'=>$site->dribbble(),
|
||||||
|
'class'=>'',
|
||||||
|
'placeholder'=>'',
|
||||||
|
'tip'=>''
|
||||||
|
));
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -515,6 +525,23 @@
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Custom fields -->
|
||||||
|
<div class="tab-pane" id="custom-fields" role="tabpanel" aria-labelledby="custom-fields-tab">
|
||||||
|
<?php
|
||||||
|
echo Bootstrap::formTitle(array('title'=>$L->g('Custom fields')));
|
||||||
|
|
||||||
|
echo Bootstrap::formTextarea(array(
|
||||||
|
'name'=>'customFields',
|
||||||
|
'label'=>$L->g('Custom'),
|
||||||
|
'value'=>$site->customFields(),
|
||||||
|
'class'=>'',
|
||||||
|
'placeholder'=>'',
|
||||||
|
'tip'=>'',
|
||||||
|
'rows'=>15
|
||||||
|
));
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Site logo tab -->
|
<!-- Site logo tab -->
|
||||||
<div class="tab-pane" id="logo" role="tabpanel" aria-labelledby="logo-tab">
|
<div class="tab-pane" id="logo" role="tabpanel" aria-labelledby="logo-tab">
|
||||||
<?php
|
<?php
|
||||||
|
|
|
@ -28,6 +28,8 @@ if (Sanitize::pathFile(PATH_THEMES, $site->theme().DS.'index.php')) {
|
||||||
$L->p('Please check your theme configuration in the admin panel. Check for an active theme.');
|
$L->p('Please check your theme configuration in the admin panel. Check for an active theme.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var_dump($page->custom('field3'));
|
||||||
|
|
||||||
// Plugins after site loaded
|
// Plugins after site loaded
|
||||||
Theme::plugins('afterSiteLoad');
|
Theme::plugins('afterSiteLoad');
|
||||||
|
|
||||||
|
|
|
@ -575,6 +575,15 @@ function editSettings($args) {
|
||||||
$args['extremeFriendly'] = (($args['extremeFriendly']=='true')?true:false);
|
$args['extremeFriendly'] = (($args['extremeFriendly']=='true')?true:false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($args['customFields'])) {
|
||||||
|
// Custom fields need to be JSON format valid, also the empty JSON need to be "{}"
|
||||||
|
json_decode($args['customFields']);
|
||||||
|
if (json_last_error() != JSON_ERROR_NONE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$pages->setCustomFields($args['customFields']);
|
||||||
|
}
|
||||||
|
|
||||||
if ($site->set($args)) {
|
if ($site->set($args)) {
|
||||||
// Check current order-by if changed it reorder the content
|
// Check current order-by if changed it reorder the content
|
||||||
if ($site->orderBy()!=ORDER_BY) {
|
if ($site->orderBy()!=ORDER_BY) {
|
||||||
|
|
|
@ -64,6 +64,14 @@ class Pages extends dbJSON {
|
||||||
$tags = $args['tags'];
|
$tags = $args['tags'];
|
||||||
}
|
}
|
||||||
$finalValue = $this->generateTags($tags);
|
$finalValue = $this->generateTags($tags);
|
||||||
|
} elseif ($field=='custom') {
|
||||||
|
if (isset($args['custom'])) {
|
||||||
|
foreach ($args['custom'] as $customField=>$customValue) {
|
||||||
|
$row['custom'][$customField]['value'] = Sanitize::html($customValue);
|
||||||
|
}
|
||||||
|
unset($args['custom']);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
} elseif (isset($args[$field])) {
|
} elseif (isset($args[$field])) {
|
||||||
// Sanitize if will be stored on database
|
// Sanitize if will be stored on database
|
||||||
$finalValue = Sanitize::html($args[$field]);
|
$finalValue = Sanitize::html($args[$field]);
|
||||||
|
@ -168,6 +176,14 @@ class Pages extends dbJSON {
|
||||||
foreach ($this->dbFields as $field=>$value) {
|
foreach ($this->dbFields as $field=>$value) {
|
||||||
if ( ($field=='tags') && isset($args['tags'])) {
|
if ( ($field=='tags') && isset($args['tags'])) {
|
||||||
$finalValue = $this->generateTags($args['tags']);
|
$finalValue = $this->generateTags($args['tags']);
|
||||||
|
} elseif ($field=='custom') {
|
||||||
|
if (isset($args['custom'])) {
|
||||||
|
foreach ($args['custom'] as $customField=>$customValue) {
|
||||||
|
$row['custom'][$customField]['value'] = Sanitize::html($customValue);
|
||||||
|
}
|
||||||
|
unset($args['custom']);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
} elseif (isset($args[$field])) {
|
} elseif (isset($args[$field])) {
|
||||||
// Sanitize if will be stored on database
|
// Sanitize if will be stored on database
|
||||||
$finalValue = Sanitize::html($args[$field]);
|
$finalValue = Sanitize::html($args[$field]);
|
||||||
|
@ -581,8 +597,6 @@ class Pages extends dbJSON {
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function sortBy()
|
public function sortBy()
|
||||||
{
|
{
|
||||||
if (ORDER_BY=='date') {
|
if (ORDER_BY=='date') {
|
||||||
|
@ -772,4 +786,30 @@ class Pages extends dbJSON {
|
||||||
return $this->save();
|
return $this->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Insert custom fields to all the pages in the database
|
||||||
|
// The structure for the custom fields need to be a valid JSON format
|
||||||
|
// The custom fields are incremental, this means the custom fields are never deleted
|
||||||
|
// The pages only store the value of the custom field, the structure of the custom fields are in the database site.php
|
||||||
|
public function setCustomFields($fields)
|
||||||
|
{
|
||||||
|
$customFields = json_decode($fields, true);
|
||||||
|
if (json_last_error() != JSON_ERROR_NONE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
foreach ($this->db as $pageKey=>$pageFields) {
|
||||||
|
foreach ($customFields as $customField=>$customValues) {
|
||||||
|
if (!isset($pageFields['custom'][$customField])) {
|
||||||
|
$defaultValue = '';
|
||||||
|
if (isset($customValues['default'])) {
|
||||||
|
$defaultValue = $customValues['default'];
|
||||||
|
}
|
||||||
|
$this->db[$pageKey]['custom'][$customField]['value'] = $defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -563,4 +563,17 @@ class Page {
|
||||||
|
|
||||||
return $string ? implode(', ', $string) . ' ago' : 'Just now';
|
return $string ? implode(', ', $string) . ' ago' : 'Just now';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the value from the field, false if the fields doesn't exists
|
||||||
|
// If you set the $option as TRUE, the function returns an array with all the values of the field
|
||||||
|
public function custom($field, $options=false)
|
||||||
|
{
|
||||||
|
if (isset($this->vars['custom'][$field])) {
|
||||||
|
if ($options) {
|
||||||
|
return $this->vars['custom'][$field];
|
||||||
|
}
|
||||||
|
return $this->vars['custom'][$field]['value'];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ class Site extends dbJSON {
|
||||||
'gitlab'=> '',
|
'gitlab'=> '',
|
||||||
'linkedin'=> '',
|
'linkedin'=> '',
|
||||||
'mastodon'=> '',
|
'mastodon'=> '',
|
||||||
|
'dribbble'=> '',
|
||||||
'orderBy'=> 'date', // date or position
|
'orderBy'=> 'date', // date or position
|
||||||
'extremeFriendly'=> true,
|
'extremeFriendly'=> true,
|
||||||
'autosaveInterval'=> 2, // minutes
|
'autosaveInterval'=> 2, // minutes
|
||||||
|
@ -44,7 +45,8 @@ class Site extends dbJSON {
|
||||||
'thumbnailHeight'=> 400, // px
|
'thumbnailHeight'=> 400, // px
|
||||||
'thumbnailQuality'=> 100,
|
'thumbnailQuality'=> 100,
|
||||||
'logo'=> '',
|
'logo'=> '',
|
||||||
'markdownParser'=> true
|
'markdownParser'=> true,
|
||||||
|
'customFields'=> '{}'
|
||||||
);
|
);
|
||||||
|
|
||||||
function __construct()
|
function __construct()
|
||||||
|
@ -185,6 +187,11 @@ class Site extends dbJSON {
|
||||||
return $this->getField('mastodon');
|
return $this->getField('mastodon');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function dribbble()
|
||||||
|
{
|
||||||
|
return $this->getField('dribbble');
|
||||||
|
}
|
||||||
|
|
||||||
public function orderBy()
|
public function orderBy()
|
||||||
{
|
{
|
||||||
return $this->getField('orderBy');
|
return $this->getField('orderBy');
|
||||||
|
@ -394,4 +401,10 @@ class Site extends dbJSON {
|
||||||
return date_default_timezone_set($timezone);
|
return date_default_timezone_set($timezone);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
// Returns the custom fields
|
||||||
|
public function customFields()
|
||||||
|
{
|
||||||
|
return Sanitize::htmlDecode($this->getField('customFields'));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue