phpfacebookcodeigniterfacebook-opengraphmetatag

Meta tag helper with Open Graph tags


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" />

Solution

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