Meta tag helper with Open Graph tags
-
13-03-2021 - |
문제
How do I use the Codeigniter Metatag helper with the Facebook open graph metatags?
the metatag helper wants to inject name as the first attribute which Facebook doesn't use. Is there any way to use the helper to add my own custom scheme? It seems there are some defaults like 'name'
that i can't get rid of using the helper.
what i did:
$meta = array(
array('property' => 'og:type', 'content' => 'movie'),
array('property' => 'og:video:height', 'content' => '260'),
array('property' => 'og:video:width', 'content' => '420'),
array('property' => 'og:video:type', 'content' => 'application/x-shockwave-flash'),
array('property' => 'og:title', 'content' => $data['video']),
array('property' => 'og:description', 'content' => $data['video_desc']),
array('property' => 'og:image', 'content' => 'http://i2.ytimg.com/vi/'.$data['links']['extra_link_info']['original_key'].'/hqdefault.jpg'),
array('property' => 'og:video', 'content' => 'https://www.youtube.com/v/'.$data['links']['extra_link_info']['original_key'].'?version=3&autohide=1&autoplay=1')
);
what i get:
<meta name="" content="movie" />
<meta name="" content="260" />
<meta name="" content="420" />
<meta name="" content="application/x-shockwave-flash" />
<meta name="" content="xxxxxxxx" />
<meta name="" content="xxxxxxxx" />
<meta name="" content="http://i2.ytimg.com/vi/xxxxxxxx/hqdefault.jpg" />
<meta name="" content="xxxxxxxx" />
what i want:
<meta property="og:tyoe" content="movie" />
<meta property="og:video:height" content="260" />
<meta property="og:video:width" content="420" />
<meta property="og:video:type" content="application/x-shockwave-flash" />
<meta property="og:title" content="xxxxxxxx" />
<meta property="og:description" content="xxxxxxxx" />
<meta property="og:image" content="http://i2.ytimg.com/vi/xxxxxxxx/hqdefault.jpg" />
<meta property="og:video" content="xxxxxxxx" />
해결책 2
Fixed it:
Extended the HTML helper and changed all the name
references to property
.
MY_html_helper
<?php
/**
* Generates meta tags from an array of key/values
*
* @access public
* @param array
* @return string
*/
if ( ! function_exists('meta'))
{
function meta($property = '', $content = '', $type = 'property', $newline = "\n")
{
// Since we allow the data to be passes as a string, a simple array
// or a multidimensional one, we need to do a little prepping.
if ( ! is_array($property))
{
$property = array(array('property' => $property, 'content' => $content, 'type' => $type, 'newline' => $newline));
}
else
{
// Turn single array into multidimensional
if (isset($property['property']))
{
$property = array($property);
}
}
$str = '';
foreach ($property as $meta)
{
$type = ( ! isset($meta['type']) OR $meta['type'] == 'property') ? 'property' : 'http-equiv';
$property = ( ! isset($meta['property'])) ? '' : $meta['property'];
$content = ( ! isset($meta['content'])) ? '' : $meta['content'];
$newline = ( ! isset($meta['newline'])) ? "\n" : $meta['newline'];
$str .= '<meta '.$type.'="'.$property.'" content="'.$content.'" />'.$newline;
}
return $str;
}
}
다른 팁
I used this
MY_html_helper.php
if (!function_exists('meta')) {
function meta($name = '', $content = '', $type = 'name', $newline = "\n") {
// Since we allow the data to be passes as a string, a simple array
// or a multidimensional one, we need to do a little prepping.
if (!is_array($name)) {
$name = array(array('name' => $name, 'content' => $content, 'type' => $type, 'newline' => $newline));
} else {
// Turn single array into multidimensional
if (isset($name['name'])) {
$name = array($name);
}
}
$str = '';
foreach ($name as $meta) {
if ((!isset($meta['type']) OR $meta['type'] == 'name')) {
$type = 'name';
} else if ($meta['type'] == 'equiv') {
$type = 'http-equiv';
} else {
$type = $meta['type'];
}
$name = (!isset($meta['name'])) ? '' : $meta['name'];
$content = (!isset($meta['content'])) ? '' : $meta['content'];
$newline = (!isset($meta['newline'])) ? "\n" : $meta['newline'];
$str .= '<meta ' . $type . '="' . $name . '" content="' . $content . '" />' . $newline;
}
return $str;
}
}
Usage :
$meta = array(
array('name' => 'og:title', 'content' => 'my great title', 'type' => 'property')
);
제휴하지 않습니다 StackOverflow