我正在使用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) . "' />";
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"; } }
共享功能在浏览器中运行良好,但是,我想通过移动应用程序分享链接.由于应用程序不包含会话,因此无法检查语言.另外,如果我将参数放在链接中,例如.
http://example.com/video/view/1/english
然后我的共享链接也将修复该语言.
有任何想法吗 ?非常感谢您的帮助.
如果您将链接中的语言信息放在http://example.com/video/view/1/english这样的链接中,那么控制器可以将语言信息作为参数(如果您提到它会有所帮助)什么是这里的控制器,但让我们说它是view()),并使用它,如下所示:
function view($param1,$lang = false){ }
然后你可以修改函数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"; } }
这样,如果在url中设置语言,则会忽略$CI-> session-> userdata(‘site_lang’).
现在,如果你想将$lang传递给你的视图,你可以这样做:
function view($param1,$lang = false){ $local['lang_by_url'] = $lang; $this->load->view('the_view',$local); }
在你看来:
echo "<Meta name='twitter:card' content='summary' />"; echo "<Meta property='og:title' content='" $video->{set_lang("title",$lang_by_url)} . "' />"; ... ...
这有点hacky,但它应该工作.