[plugin] Twitter cards update
This commit is contained in:
parent
e4569677c4
commit
72dca22ebd
4 changed files with 105 additions and 26 deletions
13
bl-plugins/twitter-cards/languages/cs_CZ.json
Normal file
13
bl-plugins/twitter-cards/languages/cs_CZ.json
Normal file
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"plugin-data":
|
||||
{
|
||||
"name": "Twitter Cards",
|
||||
"description": "With Twitter Cards, you can attach rich photos, videos and media experiences to Tweets, helping to drive traffic to your website."
|
||||
},
|
||||
"default-image": "Výchozí obrázek",
|
||||
"twitter-site-profile": "Profil stránky na Twitteru",
|
||||
"twitter-author-profile": "Profil autora příspěvku na Twitteru",
|
||||
"minimum-image-dimensions": "Minimální rozměry obrázku jsou 300x157px a maximum 4096x4096px.",
|
||||
"image-must-be-less": "Obrázek musí být menší než 5MB.",
|
||||
"formats-are-supported": "Jsou podporovány formáty pouze JPG, PNG, WEBP a GIF."
|
||||
}
|
|
@ -4,5 +4,10 @@
|
|||
"name": "Twitter Cards",
|
||||
"description": "With Twitter Cards, you can attach rich photos, videos and media experiences to Tweets, helping to drive traffic to your website."
|
||||
},
|
||||
"default-image": "Default image"
|
||||
}
|
||||
"default-image": "Default image",
|
||||
"twitter-site-profile": "Twitter site profile",
|
||||
"twitter-author-profile": "Twitter author profile",
|
||||
"minimum-image-dimensions": "The minimum image dimensions are 300x157px and the maximum 4096x4096px.",
|
||||
"image-must-be-less": "Image must be less than 5MB in size.",
|
||||
"formats-are-supported": "JPG, PNG, WEBP and GIF formats are supported."
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
"email": "",
|
||||
"website": "https://plugins.bludit.com",
|
||||
"version": "4.0.0",
|
||||
"releaseDate": "2021-05-23",
|
||||
"releaseDate": "2022-10-01",
|
||||
"license": "MIT",
|
||||
"compatible": "4.0.0",
|
||||
"notes": ""
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,9 @@ class pluginTwitterCards extends Plugin {
|
|||
{
|
||||
// Fields and default values for the database of this plugin
|
||||
$this->dbFields = array(
|
||||
'defaultImage'=>''
|
||||
'defaultImage' => '',
|
||||
'twitterSite' => '',
|
||||
'twitterCreator' => ''
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -14,9 +16,24 @@ class pluginTwitterCards extends Plugin {
|
|||
{
|
||||
global $L;
|
||||
|
||||
$html = '<div>';
|
||||
$html = '<div class="alert alert-primary" role="alert">';
|
||||
$html .= $this->description();
|
||||
$html .= '</div>';
|
||||
|
||||
$html .= '<div>';
|
||||
$html .= '<label>'.$L->get('Default image').'</label>';
|
||||
$html .= '<input id="jsdefaultImage" name="defaultImage" type="text" value="'.$this->getValue('defaultImage').'" placeholder="https://">';
|
||||
$html .= '<p class="text-muted small">' . $L->get('minimum-image-dimensions') . ' ' . $L->get('image-must-be-less') . ' ' . $L->get('formats-are-supported') . '</p>';
|
||||
$html .= '</div>';
|
||||
|
||||
$html .= '<div>';
|
||||
$html .= '<label>'.$L->get('Twitter site profile').'</label>';
|
||||
$html .= '<input id="jstwitterSite" name="twitterSite" type="text" value="'.$this->getValue('twitterSite').'" placeholder="@yourSiteProfile">';
|
||||
$html .= '</div>';
|
||||
|
||||
$html .= '<div>';
|
||||
$html .= '<label>'.$L->get('Twitter author profile').'</label>';
|
||||
$html .= '<input id="jstwitterCreator" name="twitterCreator" type="text" value="'.$this->getValue('twitterCreator').'" placeholder="@authorProfile">';
|
||||
$html .= '</div>';
|
||||
|
||||
return $html;
|
||||
|
@ -31,19 +48,20 @@ class pluginTwitterCards extends Plugin {
|
|||
global $page;
|
||||
|
||||
$data = array(
|
||||
'card' =>'summary',
|
||||
'site' =>'',
|
||||
'title' =>$site->title(),
|
||||
'description' =>$site->description(),
|
||||
'image' =>''
|
||||
'card' => 'summary_large_image',
|
||||
'twitterSite' => $this->getValue('twitterSite'),
|
||||
'twitterCreator' => $this->getValue('twitterCreator'),
|
||||
'title' => $site->title(),
|
||||
'description' => $site->description(),
|
||||
'image' => ''
|
||||
);
|
||||
|
||||
switch($WHERE_AM_I) {
|
||||
switch( $WHERE_AM_I ) {
|
||||
// The user filter by page
|
||||
case 'page':
|
||||
$data['title'] = $page->title();
|
||||
$data['description'] = $page->description();
|
||||
$data['image'] = $page->coverImage($absolute=true);
|
||||
$data['title'] = $page->title();
|
||||
$data['description'] = $page->description();
|
||||
$data['image'] = $page->coverImage( $absolute = true );
|
||||
|
||||
$pageContent = $page->content();
|
||||
break;
|
||||
|
@ -53,32 +71,75 @@ class pluginTwitterCards extends Plugin {
|
|||
$pageContent = '';
|
||||
// The image it's from the first page
|
||||
if(isset($content[0]) ) {
|
||||
$data['image'] = $content[0]->coverImage($absolute=true);
|
||||
$data['image'] = $content[0]->coverImage( $absolute = true );
|
||||
$pageContent = $content[0]->content();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$html = PHP_EOL.'<!-- Twitter Cards -->'.PHP_EOL;
|
||||
$html .= '<meta property="twitter:card" content="'.$data['card'].'">'.PHP_EOL;
|
||||
$html .= '<meta property="twitter:site" content="'.$data['site'].'">'.PHP_EOL;
|
||||
$html .= '<meta property="twitter:title" content="'.$data['title'].'">'.PHP_EOL;
|
||||
$html .= '<meta property="twitter:description" content="'.$data['description'].'">'.PHP_EOL;
|
||||
$html .= '<meta name="twitter:card" content="' . $data['card'] . '">'.PHP_EOL;
|
||||
$html .= '<meta name="twitter:site" content="' . $data['site'] . '">'.PHP_EOL;
|
||||
$html .= '<meta name="twitter:title" content="' . $data['title'] . '">'.PHP_EOL;
|
||||
$html .= '<meta name="twitter:creator" content="' . $data['twitterCreator'] . '">'.PHP_EOL;
|
||||
// If the page doesn't have a description try to get excerpt from content
|
||||
if( empty( $data['description'] ) )
|
||||
{
|
||||
$data['description'] = $this->content_excerpt( $pageContent , 150, '...');
|
||||
}
|
||||
$html .= '<meta name="twitter:description" content="' . $data['description'] . '">'.PHP_EOL;
|
||||
|
||||
// If the page doesn't have a coverImage try to get an image from the HTML content
|
||||
if( empty($data['image']) ) {
|
||||
if( empty( $data['image'] ) ) {
|
||||
// Get the image from the content
|
||||
$src = DOM::getFirstImage($pageContent);
|
||||
if ($src!==false) {
|
||||
$src = DOM::getFirstImage( $pageContent );
|
||||
if ( $src !== false ) {
|
||||
$data['image'] = $src;
|
||||
} else {
|
||||
if (Text::isNotEmpty($this->getValue('defaultImage'))) {
|
||||
if ( Text::isNotEmpty( $this->getValue('defaultImage') ) ) {
|
||||
$data['image'] = $this->getValue('defaultImage');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$html .= '<meta property="twitter:image" content="'.$data['image'].'">'.PHP_EOL;
|
||||
$html .= '<meta name="twitter:image" content="'.$data['image'].'">'.PHP_EOL;
|
||||
$html .= '<!-- /Twitter Cards -->'.PHP_EOL.PHP_EOL;
|
||||
|
||||
unset( $pageContent );
|
||||
unset( $data );
|
||||
|
||||
return $html;
|
||||
}
|
||||
}
|
||||
|
||||
/** Return excerpt from full content of post
|
||||
*
|
||||
* @param string $str Post content
|
||||
* @param int $n Number of characters
|
||||
* @param string $endChar End char append to after excerpt (default "...")
|
||||
* @return string
|
||||
*/
|
||||
private function content_excerpt( string $str, int $n = 500, string $endChar = '…' ): string
|
||||
{
|
||||
$str = strip_tags( $str );
|
||||
if ( mb_strlen( $str ) < $n )
|
||||
{
|
||||
return $str;
|
||||
}
|
||||
$str = preg_replace('/ {2,}/', ' ', str_replace(["\r", "\n", "\t", "\x0B", "\x0C"], ' ', $str));
|
||||
if ( mb_strlen( $str ) <= $n )
|
||||
{
|
||||
return $str;
|
||||
}
|
||||
$out = '';
|
||||
foreach ( explode( ' ', trim( $str ) ) as $val )
|
||||
{
|
||||
$out .= $val . ' ';
|
||||
if ( mb_strlen( $out ) >= $n )
|
||||
{
|
||||
$out = trim( $out );
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ( mb_strlen( $out ) === mb_strlen( $str ) ) ? $out : $out . $endChar;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue