Question

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" />
Was it helpful?

Solution 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;
    }
}

OTHER TIPS

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')
);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top