基于Joomla的网站
我有很多页面,其中h1 - header被提及为产品详细信息,并根据产品详细信息通过php显示
有2个文件
default.php
view.html.php
cdefault.php`拥有此代码
<h1>Used <?php echo $this->CatName; ?> <?php echo $this->prodDet->prod_name;?> Toy for Sale </h1>
这会正确显示h1标签。
现在我要生成页面的元标题并使用此文件中生成的h1输出view.html.php
我相信这一行定义了页面的标题
$this->document->setTitle($title);
此行定义标题h1
"{$this->item->heading}";
从页面标题中提取h1
这是完整的代码
protected function _prepareDocument()
{
$app = JFactory::getApplication();
$menus = $app->getMenu();
$title = null;
// Because the application sets a default page title,
// We need to get it from the menu item itself
$menu = $menus->getActive();
if ($menu)
{
$this->params->def('page_heading', $this->params->get('page_title', $menu->title));
}
else
{
$this->params->def('page_heading', JText::_('COM_USEDCAR_DEFAULT_PAGE_TITLE'));
}
$title = $this->params->get('page_title', '');
if (empty($title))
{
$title = $app->get('sitename');
}
elseif ($app->get('sitename_pagetitles', 0) == 1)
{
$title = JText::sprintf('JPAGETITLE', $app->get('sitename'), $title);
}
elseif ($app->get('sitename_pagetitles', 0) == 2)
{
$title = JText::sprintf('JPAGETITLE', $title, $app->get('sitename'));
}
$title = "{$this->item->heading}";
$this->document->setTitle($title);
if ($this->params->get('menu-meta_description'))
{
$this->document->setDescription($this->params->get('menu-meta_description'));
}
if ($this->params->get('menu-meta_keywords'))
{
$this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords'));
}
if ($this->params->get('robots'))
{
$this->document->setMetadata('robots', $this->params->get('robots'));
}
}
标题标记中的输出为heading
。
任何人都可以帮助并建议如何将此h1标记输出而不是$title
?
答案 0 :(得分:0)
为什么不将h1
内容作为GET
参数发送到您的php文档,然后使用echo
内的title
输出它标签?除非你避免使用dinamic echoing,否则这可能是将文本输出为title
的一个很好的解决方案。
答案 1 :(得分:0)
我会将构造title / header的逻辑抽象为某个函数,然后使用此函数在两个地方构造标题。
function constructTitle($catName, $prodName) {
return "Used {$catName} {$prodName} Toy for Sale";
}
...
[in default.php]
<h1><?php echo constructTitle($this->CatName, $this->prodDet->prod_name); ?></h1>
[in view.html.php]
$this->document->setTitle(constructTitle(..., ...));
这使您可以在一些地方使用单点来格式化标题。
显然,该功能需要放置在这样的位置,以便可以在两个地方访问它,并且您需要有一些方法来获取类别名称和产品名称 in view.html.php
。我对joomla不太熟悉,不知道这些事情。
编辑: 为了澄清,没有真正的方法来提取&#34; default.php中的标题,因为它是动态的。你需要处理php文件,然后你可能会做一些正则表达式魔法,但这绝不是问题的正确解决方案。
答案 2 :(得分:0)
这是代码标题部分的作用:
// getting title from params
$title = $this->params->get('page_title', '');
// trying to get it right
if (empty($title))
{
$title = $app->get('sitename');
}
elseif ($app->get('sitename_pagetitles', 0) == 1)
{
$title = JText::sprintf('JPAGETITLE', $app->get('sitename'), $title);
}
elseif ($app->get('sitename_pagetitles', 0) == 2)
{
$title = JText::sprintf('JPAGETITLE', $title, $app->get('sitename'));
}
// overwrite everything above with some value, making above code useless
$title = "{$this->item->heading}";
$this->document->setTitle($title);
我可能是错的,但是如果我没记错的话,如果一个值不存在,当转换为字符串时它将返回变量名。这里的“标题”可能为空。
您可能希望将代码更改为以下内容:
[...]
if(!title){
if(property_exists($this, 'item') && property_exists($this->item, 'heading') && $this->item->heading){
$title = $this->item->heading;
} else {
$title = sprintf('Used %s %s Toy for Sale' , $this->CatName, $this->prodDet->prod_name);
}
}
$this->document->setTitle($title);
您可能希望将标题保存到会话中并在各处重复使用:
[...]
$this->document->setTitle($title);
// save title to session
$_SESSION['page_title'] = $title;
并更新上一个循环:
// getting title from params
$title = (isset($_SESSION['page_title']) && $_SESSION['page_title'])? $_SESSION['page_title'] : $this->params->get('page_title', '');
if (empty($title)){
[...]
完整的代码就是这样:
[...]
session_id() || session_start();
$title = (isset($_SESSION['page_title']) && $_SESSION['page_title'])? $_SESSION['page_title'] : $this->params->get('page_title', '');
if(!title){
if(property_exists($this, 'item') && property_exists($this->item, 'heading') && $this->item->heading){
$title = $this->item->heading;
} else {
$title = sprintf('Used %s %s Toy for Sale' , $this->CatName, $this->prodDet->prod_name);
}
}
if (empty($title))
{
$title = $app->get('sitename');
}
elseif ($app->get('sitename_pagetitles', 0) == 1)
{
$title = JText::sprintf('JPAGETITLE', $app->get('sitename'), $title);
}
elseif ($app->get('sitename_pagetitles', 0) == 2)
{
$title = JText::sprintf('JPAGETITLE', $title, $app->get('sitename'));
}
$_SESSION['page_title'] = $title;
$this->document->setTitle($title);
[...]
您最好抛弃所有东西,然后根据需要这样做:
[...]
$title = $this->params->get('page_title', '');
if(!title){
if(property_exists($this, 'item') && property_exists($this->item, 'heading') && $this->item->heading) {
$title = $this->item->heading;
} elseif(
property_exists($this, 'CatName') &&
property_exists($this, 'prodDet') &&
property_exists($$this->prodDet, 'prod_name') &&
$this->CatName &&
$this->prodDet->prod_name
){
$title = sprintf('Used %s %s Toy for Sale' , $this->CatName, $this->prodDet->prod_name);
} else {
$title = $app->get('sitename');
}
}
$this->document->setTitle($title);
[...]
代码未经测试,但可以让您走上正确的路:)
答案 3 :(得分:0)
您可以只将h1内容作为GET参数发送到您的php文档,然后在标题标签中使用echo将其输出?除非您避免动态回显,否则它将起作用。