문제

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')
);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top