From 94bf1efda2359647ea51aa8b4cacbb3c54b16dc1 Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 6 Jun 2022 17:28:23 -0700 Subject: [PATCH] Issue #4783 Added new field for meta-news-title. New prefs added for SEO Title and Description character limits. --- e107_admin/meta.php | 19 +++-- e107_admin/newspost.php | 76 +++++++++++++++++-- e107_core/sql/core_sql.php | 1 + e107_core/templates/header_default.php | 11 +-- e107_handlers/form_handler.php | 43 ++++++++++- e107_languages/English/admin/lan_admin.php | 4 +- e107_languages/English/admin/lan_meta.php | 3 + e107_plugins/news/news.php | 7 +- e107_plugins/social/e_admin.php | 2 +- .../bootstrap3/css/bootstrap-dark.min.css | 2 +- e107_themes/bootstrap3/css/modern-dark.css | 2 +- e107_themes/bootstrap3/css/modern-light.css | 2 +- e107_web/js/core/admin.jquery.js | 18 +++-- 13 files changed, 150 insertions(+), 40 deletions(-) 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