0

我开发了一个分页url友好的类,问题是不能拉数组变量来定义数据库的值

private function query($page){

    $u = Url::getURL($page);
    $numreg = $this->max_reg; // Quantos registros por página vai ser mostrado

    if (!isset($u)) {
        $u = 1;
    }

    @$inicial = $u * $this->max_reg;
    $sql = mysql_query("SELECT * FROM {$this->table} ORDER BY id desc LIMIT $inicial, $numreg") or die(mysql_error());          
    $sql_conta = mysql_query("SELECT * FROM {$this->table}") or die(mysql_error());

    $out = '';

    while ($data = mysql_fetch_array($sql_conta)) {         
        $out.= $this->HTML;     
    }

    return print $out;      
}

到目前为止一切正常

问题:

global $data;
$p = new pagination;
$p->HTML    = '
                        <li> 
                            <div class="clbthumb"><a href="#"><img src="asset/images/noticias/news4.gif" alt="" /></a></div>
                            <div class="clbdes">
                                <p class="clbtitle"><a class="colr4" href="#">'.$data['titulo'].'</a></p>  
                                <p>'.$data['texto'].'</p>
                                <div class="clear"></div>
                                <div class="clbinfo">
                                    <ul>
                                        <li class="datetag">
                                            <span class="colr3">Data:</span> 
                                            <span class="pink padr">Tue, 26/01/11</span> 
                                        <li class="moreinfo"><a href="#">:: Ler Mais</a></li>

                                    </ul>
                                </div>
                            </div>
                        </li>';
$p->af_HTML = '
                    </ul>
                </div>';
$p->_build(2);

有什么方法可以做到这一点吗?

4

2 回答 2

1

您不能以这种方式访问​​在类内部分配的变量。您使用中的$data变量(分配给 HTML)不可访问(在您的第二部分代码中)。

如果你坚持从你的类之外设置 HTML,你可以为每个变量添加占位符到你的 HTML,然后在你的类中替换它们。

所以你的代码看起来像

(assuming class is pagination)

class pagination
    private function query($page){

        ...
        while ($data = mysql_fetch_array($sql_conta)) {         
            $out.= str_replace('##DATA_TITULO##', $data['titulo'] , $this->HTML, $out);
            $out.= str_replace('##DATA_TEXTO##', $data['texto'] , $this->HTML, $out);
        }
        ...
    }
}

第二部分将是

$p = new pagination;
$p->HTML    = '... <a class="colr4" href="#">##DATA_TITULO##</a></p>  <p>##DATA_TEXTO##</p>...';
于 2013-08-16T02:20:45.030 回答
0

$data需要在定义它的函数中声明为全局的(以及在使用它的任何其他函数中)

private function query($page){
    global $data;
    ...
}

否则,您只是设置了一个局部范围的变量,该变量恰好也被命名为$data.

如果你的pagination类有一个html($data)函数来避免全局变量并确保你从 获取当前值$data,而不是你最初设置时的任何值,那可能会更好$p->HTML

于 2013-08-16T01:49:11.733 回答