diff --git a/bl-plugins/twitter-cards/languages/cs_CZ.json b/bl-plugins/twitter-cards/languages/cs_CZ.json new file mode 100644 index 00000000..3b3edfcc --- /dev/null +++ b/bl-plugins/twitter-cards/languages/cs_CZ.json @@ -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." +} diff --git a/bl-plugins/twitter-cards/languages/en.json b/bl-plugins/twitter-cards/languages/en.json index 5f98378d..f314a695 100644 --- a/bl-plugins/twitter-cards/languages/en.json +++ b/bl-plugins/twitter-cards/languages/en.json @@ -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" -} \ No newline at end of file + "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." +} diff --git a/bl-plugins/twitter-cards/metadata.json b/bl-plugins/twitter-cards/metadata.json index d62ed64e..5540bdca 100644 --- a/bl-plugins/twitter-cards/metadata.json +++ b/bl-plugins/twitter-cards/metadata.json @@ -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": "" -} \ No newline at end of file +} diff --git a/bl-plugins/twitter-cards/plugin.php b/bl-plugins/twitter-cards/plugin.php index 26acdc80..754e3df1 100644 --- a/bl-plugins/twitter-cards/plugin.php +++ b/bl-plugins/twitter-cards/plugin.php @@ -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 = '
'; + $html = ''; + + $html .= '
'; $html .= ''; $html .= ''; + $html .= '

' . $L->get('minimum-image-dimensions') . ' ' . $L->get('image-must-be-less') . ' ' . $L->get('formats-are-supported') . '

'; + $html .= '
'; + + $html .= '
'; + $html .= ''; + $html .= ''; + $html .= '
'; + + $html .= '
'; + $html .= ''; + $html .= ''; $html .= '
'; 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.''.PHP_EOL; - $html .= ''.PHP_EOL; - $html .= ''.PHP_EOL; - $html .= ''.PHP_EOL; - $html .= ''.PHP_EOL; + $html .= ''.PHP_EOL; + $html .= ''.PHP_EOL; + $html .= ''.PHP_EOL; + $html .= ''.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 .= ''.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 .= ''.PHP_EOL; + $html .= ''.PHP_EOL; + $html .= ''.PHP_EOL.PHP_EOL; + + unset( $pageContent ); + unset( $data ); + return $html; } -} \ No newline at end of file + + /** 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; + } +}