首先,我不是一个PHP极客,我只是为了好玩而篡改它。
我有一个函数在我的基于virtmart的商店(仅限localhost)中循环遍历类别,并为具有子类别的所有类别创建一个<select>
对象; “鞋子”类别具有子类别“靴子”和“凉鞋”,因此创建了具有这两个选项的<select>
。
现在,此函数的结果存储在变量($ v2)中,然后与表单中的其他变量一起回显,如:
<div id="addwrap">
<?php
echo $vl;
echo $v2; ?>
</div>
一切正常,但$v2
显示在“addwrap”元素之外。
使用的函数没有可以保持打开的DIV元素并将页面拆开。
你知道为什么会这样吗?
编辑 - 生成的HTML如下所示:
<select id="kat244" class="inputbox" name="list_order">
<option value='one'></option>
<option value='two'></option></select>
<div id="addwrap">v1 content</div>
我在评论中发布的代码片段来自于firebug - 这就是为什么它显示错误
编辑nr2 - 我无法掌握这个编辑器......:\代码现在是显示的代码。抱歉错误......:\
最终编辑 - 发布与渲染片段相关的完整功能代码:
这是主要功能 - 调用下面发布的另外两个函数(has_childs和list_level_mod) `function trown($ class =“”,$ category_id =“0”,$ level =“0”){ $ db = new ps_DB;
$level++;
$q = "SELECT * FROM #__{vm}_category,#__{vm}_category_xref ";
$q .= "WHERE #__{vm}_category_xref.category_parent_id='";
$q .= $category_id . "' AND ";
$q .= "#__{vm}_category.category_id=#__{vm}_category_xref.category_child_id ";
$db->setQuery($q);
$db->query();
while ($db->next_record()) {
if ( $this->has_childs( $db->f("category_id")) == true)
{
echo $this->list_level_mod( $db->f("category_id"),'1','0');
}
else
{
continue;
}
$this->trown($class, $db->f("category_child_id"), $level);
}
}`
这是检查类别是否具有子类的函数:
function has_childs($category_id) {
$db = new ps_DB;
if( empty( $GLOBALS['category_info'][$category_id]['has_childs'] )) {
$q = "SELECT category_child_id FROM #__{vm}_category_xref ";
$q .= "WHERE category_parent_id='$category_id' ";
$db->setQuery($q); $db->query();
if ($db->num_rows() > 0)
$GLOBALS['category_info'][$category_id]['has_childs'] = true;
else
$GLOBALS['category_info'][$category_id]['has_childs'] = false;
}
return $GLOBALS['category_info'][$category_id]['has_childs'];
}
这是渲染选择对象的函数:
function list_level_mod( $category_parent_id, $category_id='0', $list_order=0 ) {
$db = new ps_DB;
if (!$category_id) {
return $GLOBALS['VM_LANG']->_('CMN_NEW_ITEM_LAST');
}
else {
$q = "SELECT list_order,category_id,category_name,category_child_id FROM #__{vm}_category, #__{vm}_category_xref ";
$q .= "WHERE category_parent_id='$category_parent_id' ";
$q .= "AND category_child_id=category_id ";
$db->query( $q );
$html = "<select id=\"kat".$category_parent_id."\">\n";
while( $db->next_record() ) {
$html .= "<option value=\"".$db->f("category_id")."\" >".$db->f("category_name")
."</option>\n";
}
$html .= "</select><br/>";
return $html;
}
}
最后,main函数的结果传递给$ v2变量,而不是像上面发布的那样回显。
答案 0 :(得分:0)
尝试给予
<div id="addwrap">
<?php
echo $vl;
echo $v2; ?>
<div style="clear:both;"></div>
</div>
答案 1 :(得分:0)
我认为上述问题应该可以解决您的问题。我认为,你是CSS造型。如果是这样,你检查过你的风格吗?
#addwrap{
padding:20px;
overflow:hidden;
}
原谅,如果这没有帮助。这只是另一个想法。
答案 2 :(得分:0)
好的...多亏了朋友。
问题是主要功能中的回声部分:
echo $this->list_level_mod( $db->f("category_id"),'1','0');
并且函数的结果没有传递给$ v2
已更正,正常运行功能:
function trown($class="",$category_id="0", $level="0") {
$db = new ps_DB;
$level++;
$q = "SELECT * FROM #__{vm}_category,#__{vm}_category_xref ";
$q .= "WHERE #__{vm}_category_xref.category_parent_id='";
$q .= $category_id . "' AND ";
$q .= "#__{vm}_category.category_id=#__{vm}_category_xref.category_child_id ";
$db->setQuery($q);
$db->query();
$html = "<div id=\"selekty\">";
while ($db->next_record()) {
if ( $this->has_childs( $db->f("category_id")) == true)
{
//$this->list_level_mod( $db->f("category_id"),'1','0');
$html .= $this->list_level_mod( $db->f("category_id"),'1','0');
}
else
{
continue;
}
$html .=$this->trown($class, $db->f("category_child_id"), $level);
}
$html .= "</div>";
return $html;
谢谢大家的时间, Shh的