我想创建一个移动网站网站,我正在尝试让我的导航适应屏幕尺寸。导航的HTML结构将发生变化,我知道我可以使用CSS和@MEDIA调用。但是,它不适用于我的情况,因为我使用的是 ZURB 框架的基础,我需要更改元素,从 UL 到 DD 或 DL 等。
我环顾了几个来源,发现由于 PHP 在 AJAX 准备就绪之前首先加载,因此我无法让我的导航在移动设备上正确显示。
我需要一些方法来检测我的屏幕尺寸并将该值传达给我在 Joomla 中的 PHP 菜单生成函数。
我尝试了以下方法:
window.onload = function(){
var height = $(window).height();
var width = $(window).width();
$.ajax({
type: "POST",
url: '',
data: {
"height": height,
"width": width
},
success: function (data) {
},
});
}
mod_menu示例:
<?php
require_once('FirePHPCore/FirePHP.class.php');
$firephp = FirePHP::getInstance(true);
ob_start();
$width = $_POST['width'];
$firephp->group('Test Group');
$firephp->log('Width');
$firephp->log($width);
$firephp->groupEnd();
?>
if ($width > 767) {
?>
<!-- The class on the root UL tag was changed to match the Foundation nav style -->
<ul class="nav-bar<?php echo $params->get('class_sfx');?>"<?php
$tag = '';
if ($params->get('tag_id')!=NULL) {
$tag = $params->get('tag_id').'';
echo ' id="'.$tag.'"';
}
?>>
<?php
foreach ($list as $i => &$item) :
$id = '';
if($item->id == $active_id)
{
$id = ' id="current"';
}
$class = '';
if(in_array($item->id, $path))
{
$class .= 'current ';
}
if($item->deeper) {
$class .= 'parent ';
}
$class = ' class="'.$class.'item'.$item->id.'"';
echo '<li'.$id.$class.'>';
// Render the menu item.
switch ($item->type) :
case 'separator':
case 'url':
case 'component':
require JModuleHelper::getLayoutPath('mod_menu', 'default_'.$item->type);
break;
default:
require JModuleHelper::getLayoutPath('mod_menu', 'default_url');
break;
endswitch;
// The next item is deeper.
if ($item->deeper) {
echo '<ul>';
}
// The next item is shallower.
elseif ($item->shallower) {
echo '</li>';
echo str_repeat('</ul></li>', $item->level_diff);
}
// The next item is on the same level.
else {
echo '</li>';
}
endforeach;
?></ul>
<?php } ?>
然后,我使用 if 条件检查屏幕宽度并选择导航类型。一个导航使用UL结构,另一个必须使用DL DD结构。
我使用 FirePHP 查看页面的加载方式,我的导航没有显示,因为 PHP 在 Ajax 准备就绪之前首先加载,所以我看不到我的导航。我需要我的PHP等到Ajax准备好或页面的一部分等待。我不知道从这里去哪里。
我正在查看Joomla MooTools,不确定我是否可以利用它来等待Ajax在页面加载之前加载。
我知道,有更简单的方法,比如在Joomla中制作一个全新的菜单项,或者在Joomla中隐藏东西来让它工作,但我想要一种更干净、更优雅的方式。
如果有人有任何代码示例。请发布。
见下面的网址
http://forum.joomla.org/viewtopic.php?f=642&t=718062
或阅读
我认为你可能会让这件事变得更加困难。通常我建议使用 CSS 和 @media,它们仍然可以实现以允许使用现有标准加载任何自适应样式,而无需编写任何新代码。然而,调整模块图像大小是您"问题"的实质所在;这将需要一些手工滚动的善良。
幻灯片模块代码是你写的吗?您可以轻松运行快速脚本来获取屏幕大小,然后更改从 db params 字段传递到代码的图像大小参数,以根据屏幕反映所需的大小。
如果你没有编写幻灯片代码或不想破解它,我的建议是创建一个Joomla内容插件,每次Joomla渲染一个新页面时,你的插件都会检查两件事,是否加载了任何幻灯片模块和屏幕的大小。这种方式还有一个额外的好处,即允许您合并自适应设计所需的任何新模块或组件特定的布局/设计更改,而无需重新发明轮子。
让我知道这是怎么回事,这实际上与我刚刚为我们公司的Joomla投资组合交付的项目相同,并且也将致力于解决这个问题。
解决方案是通过浏览器识别:
User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16
我在这里找到了一个很好的指南。