tweetcards.php
3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php
/**
* Content Plugin for Joomla! - Tweet Cards
*
* @author JoomlaTemplat.es <htmgarcia@gmail.com>
* @copyright Copyright 2016 JoomlaTemplat.es
* @license GNU Public License version 3 or later
* @link https://joomlatemplat.es/extensions/tweet-cards
*/
defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
/**
* Class PlgContentTweetcards
*
* @since 0.0.1
*/
class PlgContentTweetcards extends JPlugin
{
/**
* Event method onContentBeforeDisplay
*
* @param string $context The context of the content being passed to the plugin
* @param mixed &$row An object with a "text" property
* @param mixed &$params Additional parameters
* @param int $page Optional page number
*
* @return null
*
* @since 0.0.1
*/
public function onContentBeforeDisplay($context, &$row, &$params, $page = 0)
{
$twitteraccount = $this->params->get('twitteraccount', '@htmgarcia');
$type = $this->params->get('type', 'summary');
if ($context == 'com_content.article') {
// Load twitter meta tags
$this->setMetadata (
$this->setMetatitle(
$row->metadata,
$row->title
),
$this->setImage(
$row->images,
$row->text
),
$this->setMetadesc(
$row->metadesc,
$row->text
),
$twitteraccount,
$type
);
}
}
/**
* Event method that create the open graph meta tags
*
* @param string $title The article's title
*
* @since 0.0.1
*/
protected function setMetadata ($title, $image, $metadesc, $twitteraccount, $type) {
$doc = JFactory::getDocument();
$doc->setMetaData( 'twitter:card', $type );
$doc->setMetaData( 'twitter:site', $twitteraccount );
$doc->setMetaData( 'twitter:title', $title );
$doc->setMetaData( 'twitter:description', $metadesc );
$doc->setMetaData( 'twitter:image', $image );
}
/**
* Extract article's image
*
* @return string
*
* @since 0.0.1
*/
protected function setImage($images, $text) {
$fullImage = json_decode($images);
preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', $text, $matches);
if ( !empty($fullImage->image_fulltext) ) {
$image = JURI::base() . $fullImage->image_fulltext;
} elseif( !empty($matches[ 1 ][ 0 ]) ) {
$image = $matches[ 1 ][ 0 ];
$image = str_replace(JURI::base(), '', $image);
$image = JURI::base() . $image;
} else {
$image = '';
}
return $image;
}
/**
* Extract article's meta description
*
* @return string
*
* @since 0.0.1
*/
protected function setMetadesc($metadesc, $text) {
if($metadesc) {
$metadesc = $metadesc;
} else {
$metadesc = substr( strip_tags($text), 0, 157 ) . '...';
}
return $metadesc;
}
/**
* Extract article's meta title
*
* @return string
*
* @since 0.0.1
*/
protected function setMetatitle($metadata, $title) {
$metadata = json_decode($metadata);
if( !empty($metadata->metatitle) ) {
$metatitle = $metadata->metatitle;
} else {
$metatitle = htmlspecialchars($title);
}
return $metatitle;
}
}