Support Twitter meta tags

This commit is contained in:
Kijin Sung 2020-09-29 01:58:02 +09:00
parent 1c786d8cd5
commit 00fd1a672a
6 changed files with 54 additions and 2 deletions

View file

@ -35,6 +35,11 @@ class HTMLDisplayHandler
'@\beditor/skins/xpresseditor/js/xe_textarea\.(?:min\.)?js@' => 'editor/skins/ckeditor/js/xe_textarea.js', '@\beditor/skins/xpresseditor/js/xe_textarea\.(?:min\.)?js@' => 'editor/skins/ckeditor/js/xe_textarea.js',
); );
/**
* Image type information for SEO
*/
protected $_image_type = 'none';
/** /**
* Produce HTML compliant content given a module object.\n * Produce HTML compliant content given a module object.\n
* @param ModuleObject $oModule the module object * @param ModuleObject $oModule the module object
@ -163,10 +168,14 @@ class HTMLDisplayHandler
} }
} }
// Add OpenGraph metadata // Add OpenGraph and Twitter metadata
if (config('seo.og_enabled') && Context::get('module') !== 'admin') if (config('seo.og_enabled') && Context::get('module') !== 'admin')
{ {
$this->_addOpenGraphMetadata(); $this->_addOpenGraphMetadata();
if (config('seo.twitter_enabled'))
{
$this->_addTwitterMetadata();
}
} }
// set icon // set icon
@ -400,7 +409,6 @@ class HTMLDisplayHandler
/** /**
* Add OpenGraph metadata tags. * Add OpenGraph metadata tags.
* *
* @param string $output
* @return void * @return void
*/ */
function _addOpenGraphMetadata() function _addOpenGraphMetadata()
@ -528,6 +536,7 @@ class HTMLDisplayHandler
Context::addOpenGraphData('og:image', Rhymix\Framework\URL::getCurrentDomainURL($first_image['filepath'])); Context::addOpenGraphData('og:image', Rhymix\Framework\URL::getCurrentDomainURL($first_image['filepath']));
Context::addOpenGraphData('og:image:width', $first_image['width']); Context::addOpenGraphData('og:image:width', $first_image['width']);
Context::addOpenGraphData('og:image:height', $first_image['height']); Context::addOpenGraphData('og:image:height', $first_image['height']);
$this->_image_type = 'document';
} }
elseif ($default_image = getAdminModel('admin')->getSiteDefaultImageUrl($site_module_info->domain_srl, $width, $height)) elseif ($default_image = getAdminModel('admin')->getSiteDefaultImageUrl($site_module_info->domain_srl, $width, $height))
{ {
@ -537,6 +546,11 @@ class HTMLDisplayHandler
Context::addOpenGraphData('og:image:width', $width); Context::addOpenGraphData('og:image:width', $width);
Context::addOpenGraphData('og:image:height', $height); Context::addOpenGraphData('og:image:height', $height);
} }
$this->_image_type = 'site';
}
else
{
$this->_image_type = 'none';
} }
// Add tags and hashtags for articles. // Add tags and hashtags for articles.
@ -572,6 +586,33 @@ class HTMLDisplayHandler
} }
} }
/**
* Add Twitter metadata tags.
*
* @return void
*/
function _addTwitterMetadata()
{
$card_type = $this->_image_type === 'document' ? 'summary_large_image' : 'summary';
Context::addMetaTag('twitter:card', $card_type);
foreach(Context::getOpenGraphData() as $val)
{
if ($val['property'] === 'og:title')
{
Context::addMetaTag('twitter:title', $val['content']);
}
if ($val['property'] === 'og:description')
{
Context::addMetaTag('twitter:description', $val['content']);
}
if ($val['property'] === 'og:image' && $this->_image_type === 'document')
{
Context::addMetaTag('twitter:image', $val['content']);
}
}
}
/** /**
* import basic .js files. * import basic .js files.
* @return void * @return void

View file

@ -958,6 +958,7 @@ class adminAdminController extends admin
Rhymix\Framework\Config::set('seo.og_extract_images', $vars->og_extract_images === 'Y'); Rhymix\Framework\Config::set('seo.og_extract_images', $vars->og_extract_images === 'Y');
Rhymix\Framework\Config::set('seo.og_extract_hashtags', $vars->og_extract_hashtags === 'Y'); Rhymix\Framework\Config::set('seo.og_extract_hashtags', $vars->og_extract_hashtags === 'Y');
Rhymix\Framework\Config::set('seo.og_use_timestamps', $vars->og_use_timestamps === 'Y'); Rhymix\Framework\Config::set('seo.og_use_timestamps', $vars->og_use_timestamps === 'Y');
Rhymix\Framework\Config::set('seo.twitter_enabled', $vars->twitter_enabled === 'Y');
// Save // Save
if (!Rhymix\Framework\Config::save()) if (!Rhymix\Framework\Config::save())

View file

@ -643,6 +643,7 @@ class adminAdminView extends admin
Context::set('og_extract_images', Rhymix\Framework\Config::get('seo.og_extract_images')); Context::set('og_extract_images', Rhymix\Framework\Config::get('seo.og_extract_images'));
Context::set('og_extract_hashtags', Rhymix\Framework\Config::get('seo.og_extract_hashtags')); Context::set('og_extract_hashtags', Rhymix\Framework\Config::get('seo.og_extract_hashtags'));
Context::set('og_use_timestamps', Rhymix\Framework\Config::get('seo.og_use_timestamps')); Context::set('og_use_timestamps', Rhymix\Framework\Config::get('seo.og_use_timestamps'));
Context::set('twitter_enabled', Rhymix\Framework\Config::get('seo.twitter_enabled'));
$this->setTemplateFile('config_seo'); $this->setTemplateFile('config_seo');
} }

View file

@ -249,6 +249,7 @@ $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->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->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->about_site_meta_description = 'This description will be used on pages that do not have their own description.';
$lang->twitter_enabled = 'Add Twitter Meta Tags';
$lang->og_enabled = 'Add OpenGraph Tags'; $lang->og_enabled = 'Add OpenGraph Tags';
$lang->og_extract_description = 'Extract Description from Document'; $lang->og_extract_description = 'Extract Description from Document';
$lang->og_extract_description_fallback = 'Use general description only'; $lang->og_extract_description_fallback = 'Use general description only';

View file

@ -245,6 +245,7 @@ $lang->site_meta_keywords = 'SEO 키워드';
$lang->about_site_meta_keywords = '별도의 키워드를 지정하지 않은 페이지에서는 이 키워드 목록이 표시됩니다.'; $lang->about_site_meta_keywords = '별도의 키워드를 지정하지 않은 페이지에서는 이 키워드 목록이 표시됩니다.';
$lang->site_meta_description = 'SEO 설명'; $lang->site_meta_description = 'SEO 설명';
$lang->about_site_meta_description = '별도의 설명을 지정하지 않은 페이지에서는 이 설명이 표시됩니다.'; $lang->about_site_meta_description = '별도의 설명을 지정하지 않은 페이지에서는 이 설명이 표시됩니다.';
$lang->twitter_enabled = '트위터 메타 태그 사용';
$lang->og_enabled = 'OpenGraph 태그 사용'; $lang->og_enabled = 'OpenGraph 태그 사용';
$lang->og_extract_description = '본문에서 설명 추출'; $lang->og_extract_description = '본문에서 설명 추출';
$lang->og_extract_description_fallback = '모듈 또는 사이트 전체 설명만 사용'; $lang->og_extract_description_fallback = '모듈 또는 사이트 전체 설명만 사용';

View file

@ -52,6 +52,13 @@
<label for="og_enabled_n" class="x_inline"><input type="radio" name="og_enabled" id="og_enabled_n" value="N" checked="checked"|cond="!$og_enabled" /> {$lang->cmd_no}</label> <label for="og_enabled_n" class="x_inline"><input type="radio" name="og_enabled" id="og_enabled_n" value="N" checked="checked"|cond="!$og_enabled" /> {$lang->cmd_no}</label>
</div> </div>
</div> </div>
<div class="x_control-group">
<label class="x_control-label">{$lang->twitter_enabled}</label>
<div class="x_controls">
<label for="twitter_enabled_y" class="x_inline"><input type="radio" name="twitter_enabled" id="twitter_enabled_y" value="Y" checked="checked"|cond="$twitter_enabled" /> {$lang->cmd_yes}</label>
<label for="twitter_enabled_n" class="x_inline"><input type="radio" name="twitter_enabled" id="twitter_enabled_n" value="N" checked="checked"|cond="!$twitter_enabled" /> {$lang->cmd_no}</label>
</div>
</div>
<div class="x_control-group"> <div class="x_control-group">
<label class="x_control-label">{$lang->og_extract_description}</label> <label class="x_control-label">{$lang->og_extract_description}</label>
<div class="x_controls"> <div class="x_controls">