use*_*235 8 php twitter share facebook codeigniter
我正在使用codeigniter,语言由会话决定.
我写了元数据,facebook/twitter抓取数据并共享页面:
echo "<meta name='twitter:card' content='summary' />";
echo "<meta property='og:title' content='" . $video->{set_lang("title")} . "' />";
echo "<meta property='og:description' content='" . $video->{set_lang("description")} . "' />";
echo "<meta property='og:image' content='" . (isset($video->image_url) ? site_url("thumbnail/" . $video->image_url) : $video->thumbnail) . "' />";
Run Code Online (Sandbox Code Playgroud)
set_lang函数用于检查会话,如下所示:
function set_lang($var) {
$CI = & get_instance();
$lang = $CI->session->userdata('site_lang');
if ($lang == "english") {
return $var;
} else if ($lang == "zh_tw") {
return $var . "_tw";
} else if ($lang == "zh_cn") {
return $var . "_cn";
}
}
Run Code Online (Sandbox Code Playgroud)
共享功能在浏览器中运行良好,但是,我想通过移动应用程序共享链接.由于应用程序不包含会话,因此无法检查语言.另外,如果我将参数放在链接中,例如.
http://example.com/video/view/1/english
然后我的共享链接也将修复该语言.
有任何想法吗 ?非常感谢您的帮助.
如果您将有关语言的信息放入像这样的链接中http://example.com/video/view/1/english,那么控制器可以将语言信息作为参数(如果您在这里提到控制器是什么,这将会有所帮助,但我们假设它是view()),并使用它, 像这样:
function view($param1, $lang = false){
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以修改 function set_lang(),以采用两个参数$var(原始参数) 和$lang:
function set_lang($var, $lang = false){
if(!$lang){
$CI = & get_instance();
$lang = $CI->session->userdata('site_lang');
}
if ($lang == "english") {
return $var;
} else if ($lang == "zh_tw") {
return $var . "_tw";
} else if ($lang == "zh_cn") {
return $var . "_cn";
}
}
Run Code Online (Sandbox Code Playgroud)
这样,如果 url 中设置了语言,$CI->session->userdata('site_lang')将会被忽略。
现在,如果你想传递$lang到你的视图,你可以这样做:
function view($param1, $lang = false){
$local['lang_by_url'] = $lang;
$this->load->view('the_view', $local);
}
Run Code Online (Sandbox Code Playgroud)
而在你看来:
echo "<meta name='twitter:card' content='summary' />";
echo "<meta property='og:title' content='" $video->{set_lang("title", $lang_by_url)} . "' />";
...
...
Run Code Online (Sandbox Code Playgroud)
这有点 hacky,但应该可以。