在父div之外显示的回声变量

时间:2011-07-18 11:43:26

标签: html css

首先,我不是一个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变量,而不是像上面发布的那样回显。

3 个答案:

答案 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的