diff --git a/e107_admin/meta.php b/e107_admin/meta.php
index d2cb8372a..7347298fe 100644
--- a/e107_admin/meta.php
+++ b/e107_admin/meta.php
@@ -39,7 +39,8 @@ class meta_admin extends e_admin_dispatcher
protected $adminMenu = array(
- 'main/meta' => array('caption' => LAN_MANAGE, 'perm' => '0', 'icon'=>'fas-cogs'),
+ 'main/meta' => array('caption' => LAN_MANAGE, 'perm' => '0', 'icon'=>'fas-list'),
+ 'main/prefs'=> array('caption' => "SEO", 'perm'=>'0', 'icon'=>'fas-cogs'),
);
protected $adminMenuAliases = array(// 'main/edit' => 'main/list'
@@ -58,6 +59,12 @@ class meta_admin_ui extends e_admin_ui
protected $pluginTitle = METLAN_00;
protected $pluginName = 'core';
+ protected $prefs = array(
+ 'seo_title_limit' => array('title'=>METLAN_8, 'type'=>'number', 'data'=>'int', 'help'=>'', 'writeParms'=>['size'=>'large']),
+ 'seo_description_limit' => array('title'=>METLAN_9, 'type'=>'number', 'data'=>'int', 'help'=>'', 'writeParms'=>['size'=>'large']),
+ 'meta_news_summary' => array('title'=>METLAN_3, 'type'=>'boolean', 'data'=>'int'),
+ );
+
function init()
{
@@ -91,7 +98,6 @@ class meta_admin_ui extends e_admin_ui
}
}
- $cfg->set('meta_news_summary', varset($_POST['meta_news_summary']));
$cfg->save(true, true, true);
}
@@ -181,14 +187,7 @@ class meta_admin_ui extends e_admin_ui
$text .= "
-
- " . METLAN_3 . " |
-
- " .
- $frm->checkbox('meta_news_summary', 1, varset($pref['meta_news_summary'])) . "
-
- |
-
+
" .
diff --git a/e107_admin/newspost.php b/e107_admin/newspost.php
index c78833a49..13c7c49b4 100644
--- a/e107_admin/newspost.php
+++ b/e107_admin/newspost.php
@@ -27,6 +27,32 @@ e107::css('inline', "
");
+e107::js('footer-inline', '
+
+$("#news-meta-title").focus(function() {
+
+ var title = $("#news-title").val() + " | " + "'.SITENAME.'";
+
+ if(!$(this).val())
+ {
+ $(this).val(title);
+ }
+ else
+ {
+ $(this).attr("placeholder",title);
+ }
+
+});
+
+$("#news-title").on("input change focus", function()
+{
+ var title = $("#news-title").val() + " | " + "'.SITENAME.'";
+ $("#news-meta-title").attr("placeholder",title);
+
+});
+
+');
+
class news_admin extends e_admin_dispatcher
{
@@ -409,10 +435,8 @@ class news_sub_form_ui extends e_admin_form_ui
}
-
-
-
-
+define('NEWS_TITLE_META_LIMIT', 50);
+define('NEWS_DIZ_META_LIMIT',155);
// Main News Area.
class news_admin_ui extends e_admin_ui
@@ -453,8 +477,9 @@ class news_admin_ui extends e_admin_ui
'news_body' => array('title' => "", 'type' => 'method', 'data'=>'str', 'tab'=>0, 'nolist'=>true, 'writeParms'=>'nolabel=1', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
'news_extended' => array('title' => "", 'type' => null, 'data'=>'str', 'tab'=>0, 'nolist'=>true, 'noedit'=>true, 'writeParms'=>'nolabel=1', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
+ 'news_meta_title' => array('title' => LAN_TITLE, 'type' => 'text', 'data'=>'safestr', 'filter'=>true, 'tab'=>1, 'inline'=>true, 'width' => 'auto', 'help'=>'', 'writeParms'=>['size'=>'xxlarge', 'placeholder'=>'', 'counter'=>0, 'maxlength'=> 255], 'nosort' => false),
'news_meta_keywords' => array('title' => LAN_KEYWORDS, 'type' => 'tags', 'data'=>'safestr', 'filter'=>true, 'tab'=>1, 'inline'=>true, 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
- 'news_meta_description' => array('title' => LAN_DESCRIPTION,'type' => 'textarea', 'data'=>'safestr','filter'=>true, 'tab'=>1, 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'writeParms'=>array('size'=>'xxlarge', 'maxlength'=>155, 'rows'=>2)),
+ 'news_meta_description' => array('title' => LAN_DESCRIPTION,'type' => 'textarea', 'data'=>'safestr','filter'=>true, 'tab'=>1, 'width' => 'auto', 'thclass' => '', 'help'=>'', 'class' => null, 'nosort' => false, 'writeParms'=>array('size'=>'xxlarge', 'counter'=>0, 'maxlength'=>255, 'rows'=>2)),
'news_meta_robots' => array('title' => LAN_ROBOTS, 'type' => 'dropdown', 'data'=>'safestr', 'tab'=>1, 'inline'=>true, 'readParms'=>array('type'=>'checkboxes'), 'writeParms'=>array('multiple'=>1), 'width' => 'auto', 'thclass' => 'left', 'class' => 'left', 'nosort' => false, 'batch'=>true, 'filter'=>true),
'news_sef' => array('title' => LAN_SEFURL, 'type' => 'text', 'batch'=>1, 'data'=>'str', 'tab'=>1, 'inline'=>true, 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'writeParms'=>array('size'=>'xxlarge', 'show'=>1, 'sef'=>'news_title')),
@@ -773,8 +798,9 @@ class news_admin_ui extends e_admin_ui
'news_thumbnail',
'news_sef' ,
- 'news_meta_keywords',
+ 'news_meta_title',
'news_meta_description' ,
+ 'news_meta_keywords',
'news_meta_robots' ,
@@ -936,6 +962,44 @@ class news_admin_ui extends e_admin_ui
}
+ private function setSEOLimits()
+ {
+ $seoTitleLimit = (int) e107::pref('core', 'seo_title_limit', 50);
+ $seoDescriptionLimit = (int) e107::pref('core', 'seo_description_limit', 155);
+
+ $this->fields['news_meta_title']['writeParms']['counter'] = $seoTitleLimit;
+ $this->fields['news_meta_title']['help'] = e107::getParser()->lanVars(LAN_SEARCH_ENGINES_X_LIMIT, $seoTitleLimit);
+ $this->fields['news_meta_description']['writeParms']['counter'] = $seoDescriptionLimit;
+ $this->fields['news_meta_description']['help'] = e107::getParser()->lanVars(LAN_SEARCH_ENGINES_X_LIMIT, $seoDescriptionLimit);
+
+ }
+
+ function EditObserver()
+ {
+ parent::EditObserver();
+
+ $title = $this->getFieldVar('news_title'). ' | '.SITENAME;
+ $placeholder = $this->getFieldVar('news_meta_title');
+
+ if(empty($placeholder))
+ {
+ $this->fields['news_meta_title']['writeParms']['placeholder'] = html_entity_decode($title);
+ }
+ else
+ {
+ $this->fields['news_meta_title']['writeParms']['placeholder'] = html_entity_decode($placeholder);
+ }
+
+ $this->setSEOLimits();
+
+ }
+
+ function CreateObserver()
+ {
+ parent::CreateObserver();
+ $this->setSEOLimits();
+ }
+
function saveSettings()
{
diff --git a/e107_core/sql/core_sql.php b/e107_core/sql/core_sql.php
index 19ec75d32..8d3b8f04b 100755
--- a/e107_core/sql/core_sql.php
+++ b/e107_core/sql/core_sql.php
@@ -305,6 +305,7 @@ CREATE TABLE news (
news_sef varchar(200) NOT NULL default '',
news_body longtext NOT NULL,
news_extended longtext NOT NULL,
+ news_meta_title varchar(255) NOT NULL default '',
news_meta_keywords varchar(255) NOT NULL default '',
news_meta_description text NOT NULL,
news_meta_robots varchar(255) default '',
diff --git a/e107_core/templates/header_default.php b/e107_core/templates/header_default.php
index 0f016f421..c7744cbae 100644
--- a/e107_core/templates/header_default.php
+++ b/e107_core/templates/header_default.php
@@ -11,15 +11,8 @@
*/
if (!defined('e107_INIT')) { exit; }
-if(!defined('USER_AREA'))
-{
- //overload is now possible, prevent warnings
- define('USER_AREA',TRUE);
-}
-if(!defined('ADMIN_AREA'))
-{
- define('ADMIN_AREA', false);
-}
+if(!defined('USER_AREA')) { define('USER_AREA',TRUE); }
+if(!defined('ADMIN_AREA')) { define('ADMIN_AREA', false); }
e107::getDebug()->logTime('(Header Top)');
diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php
index 791316ee4..b04689fbc 100644
--- a/e107_handlers/form_handler.php
+++ b/e107_handlers/form_handler.php
@@ -6621,12 +6621,33 @@ var_dump($select_options);*/
'data-sef-generate-confirm' => LAN_WILL_OVERWRITE_SEF . ' ' . LAN_JSCONFIRM,
]) . '>' . LAN_GENERATE . '';
}
+ elseif(!empty($parms['counter']) && empty($parms['post']))
+ {
+ $parms['class'] = 'tbox e-count';
+ $parms['data-char-count'] = $parms['counter'];
+
+ if(!empty($parms['placeholder']) && (strlen($parms['placeholder']) > (int) $parms['counter']))
+ {
+ $parms['class'] .= " has-error";
+ }
+
+ if(!isset($parms['pattern']))
+ {
+ $parms['pattern'] = '.{0,'.$parms['counter'].'}';
+ }
+ $charMsg = $tp->lanVars(defset('LAN_X_CHARS_REMAINING', '[x] chars remaining'), "" . $parms['counter'] . "");
+ $parms['post'] = "attributes([
+ 'id' => $this->name2id($key) . "-char-count",
+ 'class' => 'text-muted e-count-display',
+ 'style' => 'display:none',
+ ]) . ">" . $charMsg . "";
+ }
+
if(!empty($parms['password'])) // password mechanism without the md5 storage.
{
$ret = vartrue($parms['pre']).$this->password($key, $value, $maxlength, $parms).vartrue($parms['post']);
}
-
else
{
$ret = vartrue($parms['pre']).$this->text($key, $value, $maxlength, $parms).vartrue($parms['post']); // vartrue($parms['__options']) is limited. See 'required'=>true
@@ -6664,12 +6685,26 @@ var_dump($select_options);*/
$parms['size'] = 'xxlarge';
}
- if(!empty($parms['maxlength']) && empty($parms['post']))
+ if(!empty($parms['counter']) && empty($parms['post']))
{
- $charMsg = $tp->lanVars(defset('LAN_X_CHARS_REMAINING', '[x] chars remaining'), "" . $parms['maxlength'] . "");
+ $parms['class'] = 'tbox e-count';
+
+ if(!empty($parms['placeholder']) && (strlen($parms['placeholder']) > (int) $parms['counter']))
+ {
+ $parms['class'] .= " has-error";
+ }
+
+ if(!isset($parms['pattern']))
+ {
+ $parms['pattern'] = '.{0,'.$parms['counter'].'}';
+ }
+
+
+ $parms['data-char-count'] = $parms['counter'];
+ $charMsg = $tp->lanVars(defset('LAN_X_CHARS_REMAINING', '[x] chars remaining'), "" . $parms['counter'] . "");
$parms['post'] = "attributes([
'id' => $this->name2id($key) . "-char-count",
- 'class' => 'text-muted',
+ 'class' => 'text-muted e-count-display',
'style' => 'display:none',
]) . ">" . $charMsg . "";
}
diff --git a/e107_languages/English/admin/lan_admin.php b/e107_languages/English/admin/lan_admin.php
index 3990c8b4a..369585760 100644
--- a/e107_languages/English/admin/lan_admin.php
+++ b/e107_languages/English/admin/lan_admin.php
@@ -593,4 +593,6 @@ define("LAN_NO_SCRIPT_ACCESS_ASK", "If you believe this is an error, please ask
define("LAN_UI_FILTER_TODAY", "Today");
define("LAN_UI_FILTER_THIS_WEEK", "This Week");
define("LAN_UI_FILTER_THIS_MONTH", "This Month");
-define("LAN_UI_FILTER_THIS_YEAR", "This Year");
\ No newline at end of file
+define("LAN_UI_FILTER_THIS_YEAR", "This Year");
+
+define("LAN_SEARCH_ENGINES_X_LIMIT", "Read by search engines. Maximum [x] characters.");
diff --git a/e107_languages/English/admin/lan_meta.php b/e107_languages/English/admin/lan_meta.php
index 59a97c32d..e32decbe7 100644
--- a/e107_languages/English/admin/lan_meta.php
+++ b/e107_languages/English/admin/lan_meta.php
@@ -16,3 +16,6 @@ define("METLAN_4", "Custom tags (inside [x] tags)");
define("METLAN_5", "Custom tags (after [x])");
define("METLAN_6", "Custom tags (before [x])");
define("METLAN_7", "Any meta data or custom HTML tags entered here (such as