diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 251eb6e03..00c409ef8 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -2788,6 +2788,17 @@ class Context self::$_instance->opengraph_metadata[] = array($name, $content); } } + + /** + * Set canonical URL + * + * @param string $url + * @return void + */ + public static function setCanonicalURL($url) + { + self::addHtmlHeader(sprintf('', escape($url))); + } } /* End of file Context.class.php */ /* Location: ./classes/context/Context.class.php */ diff --git a/classes/display/HTMLDisplayHandler.php b/classes/display/HTMLDisplayHandler.php index dfbf70e23..3ea37395e 100644 --- a/classes/display/HTMLDisplayHandler.php +++ b/classes/display/HTMLDisplayHandler.php @@ -215,7 +215,7 @@ class HTMLDisplayHandler $output = preg_replace('/member\_\-([0-9]+)/s', 'member_0', $output); // Add OpenGraph metadata - if (Context::get('module') !== 'admin') + if (config('seo.og_enabled') && Context::get('module') !== 'admin') { $this->_addOpenGraphMetadata(); } @@ -412,7 +412,7 @@ class HTMLDisplayHandler // Add basic metadata. Context::addOpenGraphData('og:title', Context::getBrowserTitle()); Context::addOpenGraphData('og:site_name', Context::getSiteTitle()); - if ($page_type === 'article') + if ($page_type === 'article' && config('seo.og_extract_description')) { Context::addOpenGraphData('og:description', trim(utf8_normalize_spaces($oDocument->getContentText(200)))); } @@ -426,7 +426,6 @@ class HTMLDisplayHandler if ($page_type === 'article') { $document_canonical_url = getFullUrl('', 'mid', $current_module_info->mid, 'document_srl', $document_srl); - Context::addHtmlHeader(sprintf('', escape($document_canonical_url))); Context::addOpenGraphData('og:url', $document_canonical_url); } elseif (($page = Context::get('page')) > 1) @@ -455,7 +454,7 @@ class HTMLDisplayHandler } // Add image. - if ($page_type === 'article') + if ($page_type === 'article' && config('seo.og_extract_images')) { if (($document_images = Rhymix\Framework\Cache::get("seo:document_images:$document_srl")) === null) { @@ -515,7 +514,7 @@ class HTMLDisplayHandler } // Add datetime for articles. - if ($page_type === 'article') + if ($page_type === 'article' && config('seo.og_use_timestamps')) { Context::addOpenGraphData('article:published_time', $oDocument->getRegdate('c')); Context::addOpenGraphData('article:modified_time', $oDocument->getUpdate('c')); diff --git a/common/defaults/config.php b/common/defaults/config.php index 6e614bf75..399bbeae9 100644 --- a/common/defaults/config.php +++ b/common/defaults/config.php @@ -98,6 +98,12 @@ return array( 'display_to' => 'admin', 'allow' => array(), ), + 'seo' => array( + 'og_enabled' => false, + 'og_extract_description' => false, + 'og_extract_images' => false, + 'og_use_timestamps' => false, + ), 'mediafilter' => array( 'iframe' => array(), 'object' => array(), diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php index 87441ee69..855ffbd80 100644 --- a/modules/admin/admin.admin.controller.php +++ b/modules/admin/admin.admin.controller.php @@ -781,10 +781,17 @@ class adminAdminController extends admin $args = new stdClass; $args->meta_keywords = $vars->site_meta_keywords ? implode(', ', array_map('trim', explode(',', $vars->site_meta_keywords))) : ''; $args->meta_description = trim(utf8_normalize_spaces($vars->site_meta_description)); - $oModuleController = getController('module'); $oModuleController->updateModuleConfig('module', $args); + Rhymix\Framework\Config::set('seo.og_enabled', $vars->og_enabled === 'Y'); + Rhymix\Framework\Config::set('seo.og_extract_description', $vars->og_extract_description === 'Y'); + Rhymix\Framework\Config::set('seo.og_extract_images', $vars->og_extract_images === 'Y'); + Rhymix\Framework\Config::set('seo.og_use_timestamps', $vars->og_use_timestamps === 'Y'); + + // Save + Rhymix\Framework\Config::save(); + $this->setMessage('success_updated'); $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminConfigSEO')); } diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index 3246d327c..6bd68d3bb 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -570,12 +570,18 @@ class adminAdminView extends admin */ function dispAdminConfigSEO() { - // Site title and HTML footer + // Meta keywords and description $oModuleModel = getModel('module'); $config = $oModuleModel->getModuleConfig('module'); Context::set('site_meta_keywords', escape($config->meta_keywords)); Context::set('site_meta_description', escape($config->meta_description)); + // OpenGraph metadata + Context::set('og_enabled', Rhymix\Framework\Config::get('seo.og_enabled')); + Context::set('og_extract_description', Rhymix\Framework\Config::get('seo.og_extract_description')); + Context::set('og_extract_images', Rhymix\Framework\Config::get('seo.og_extract_images')); + Context::set('og_use_timestamps', Rhymix\Framework\Config::get('seo.og_use_timestamps')); + $this->setTemplateFile('config_seo'); } diff --git a/modules/admin/lang/en.php b/modules/admin/lang/en.php index 61db45e17..41ce7b662 100644 --- a/modules/admin/lang/en.php +++ b/modules/admin/lang/en.php @@ -147,6 +147,12 @@ $lang->site_meta_keywords = 'SEO Keywords'; $lang->about_site_meta_keywords = 'These keywords will be used on pages that do not have their own keywords.'; $lang->site_meta_description = 'SEO Description'; $lang->about_site_meta_description = 'This description will be used on pages that do not have their own description.'; +$lang->og_enabled = 'Add OpenGraph Tags'; +$lang->og_extract_description = 'Extract Description from Document'; +$lang->og_extract_description_fallback = 'Use general description only'; +$lang->og_extract_images = 'Extract Images from Document'; +$lang->og_extract_images_fallback = 'Use site default image only'; +$lang->og_use_timestamps = 'Include Timestamps'; $lang->autoinstall = 'EasyInstall'; $lang->last_week = 'Last Week'; $lang->this_week = 'This Week'; diff --git a/modules/admin/lang/ko.php b/modules/admin/lang/ko.php index 30cae27cd..71664b725 100644 --- a/modules/admin/lang/ko.php +++ b/modules/admin/lang/ko.php @@ -150,6 +150,12 @@ $lang->site_meta_keywords = 'SEO 키워드'; $lang->about_site_meta_keywords = '별도의 키워드를 지정하지 않은 페이지에서는 이 키워드 목록이 표시됩니다.'; $lang->site_meta_description = 'SEO 설명'; $lang->about_site_meta_description = '별도의 설명을 지정하지 않은 페이지에서는 이 설명이 표시됩니다.'; +$lang->og_enabled = 'OpenGraph 태그 사용'; +$lang->og_extract_description = '본문에서 설명 추출'; +$lang->og_extract_description_fallback = '모듈 또는 사이트 전체 설명만 사용'; +$lang->og_extract_images = '본문에서 이미지 추출'; +$lang->og_extract_images_fallback = '사이트 대표 이미지 사용'; +$lang->og_use_timestamps = '글 작성/수정 시각 표시'; $lang->autoinstall = '쉬운 설치'; $lang->last_week = '지난주'; $lang->this_week = '이번주'; diff --git a/modules/admin/tpl/config_seo.html b/modules/admin/tpl/config_seo.html index 886c01cd4..d33c6138e 100644 --- a/modules/admin/tpl/config_seo.html +++ b/modules/admin/tpl/config_seo.html @@ -21,6 +21,34 @@
{$lang->about_site_meta_description}
+