2013-01-23 58 views
0

我有一个关于显示一个函数的内容的问题,这个函数显示一个while循环。Php显示while循环从函数

这里是我的模型中的一个函数:

function get_results($id) 
{ 
    $stmt = "select * where ... " 
    $stmt = $this->BEAR->Database->query($stmt); 

    $result = ''; 

    while($row = mysqli_fetch_array($stmt)) 
    { 
     $result .= '<div>'; 
     $result .= $row['name']; 
     $result .= '</div>'; 
    } 

    $this->BEAR->Template->setData('loop', $result, FALSE); 
} 

这是我的控制器:

$BEAR->Webprofile->get_results(Template->getData('id')); 

这是我的看法:

<?php echo $this->getData('loop');?> 

这显示出在环路我查看没有问题。但我希望的是在我的模型中不要有任何HTMl,是否有这样做(因为这会在我的模型中导致大量的HTML)。也许我可以在模型中设置数据,然后在我的视图中获取数据。

我试过型号职能范围内设置while循环分别如下所示:

while($row = mysqli_fetch_array($stmt)) 
    { 
     $this->BEAR->Template->setData('name', $row['name']); 
     $this->BEAR->Template->setData('name', $row['age']); 
    } 

然后调用在控制器的功能,并调用每个使用setData,但这只是显示的第一个结果不完整的while循环内容。

因此,我希望在我的视图(使用HTML)中显示我的while循环的所有内容,但希望我的函数能够获取并设置数据。这可以做到吗?任何想法或指导将不胜感激。

+0

我不知道如果我明白了,你basicly想从你的PHP获得现场HTML输出?如果是这样,AJAX是给你的。 –

+0

不,基本上来自我的模型,以获取数据并在while循环中设置每行。然后在我的模型中调用该函数,并单独显示来自我的模型的设置行。 – HireLee

+0

如果您从两个不同的控制器调用$ model-> get_results,然后一年后您想要更改其中一个控制器的输出格式,那么会发生什么情况......您不能因为您在模型中创建了输出。 您的模型应该只返回数据集。您的控制器应该调用model-> get_results并将结果数据集传递给视图(模板)。 在上面的示例中,您将模型中的视图组合在一起 – Matt

回答

0

你需要对你的MVC应用一些纪律。您的模型需要返回原始数据。它应该只返回对象或数据数组。关键是一致性。

您的意见需要包括所有代码来添加您的html格式。有一个简单地调用你写出的模型函数的视图,它将吐出一个div或一个有序列表,这使得视图的整个概念变得毫无用处。你的观点应该提供所有的HTML代码。

由于您使用的是PHP,因此您可以轻松地进出HTML。

function get_results($id) 
{ 
    $stmt = "select * where ... " 
    $stmt = $this->BEAR->Database->query($stmt); 

    $results = array(); 

    while($row = mysqli_fetch_array($stmt)) 
    { 
     $results[] = $row['name'];  
    } 
    return results; 
} 

从那里,你应该能够找出您的控制器应调用此功能,并通过$结果到您的视图/模板连同:

在你的模型是这样的

开始用于渲染的特定视图文件。

0
function get_results($id) 
{ 
    $stmt = "select * where ... " 
    $stmt = $this->BEAR->Database->query($stmt); 

    $result = ''; 
    $result = mysqli_fetch_array($stmt); 
    return $result; 
} 
在你的控制器

然后:

$this->BEAR->Template->setData('loop', $model->get_results($id), FALSE); 

然后在你的模板

foreach($rows as $row){ 
    ....do something with each row 
} 

如何从模型中获取数据,然后传递到模板完整的例子

class MyController { 
    function controller_showResults(){ 
     $model = new Model(); 
     $results = $model->get_results($_GET['id']); 
     $this->BEAR->Template->setData('loop', $results, FALSE); 
    } 
} 

现在竞争w ^假设第一个参数使用setData模板是传递给视图一个变量,该变量为$导致

<?php foreach($loop as $l): ?> 
    <div><?php echo $l['name'] ?></div> 
<?php endforeach; ?> 
+0

当然,这不会工作,因为我没有获取视图内的数据,因为我需要使用$ this-> Template-> getData('循环');一定? – HireLee

+0

让我更新我的答案,以更好地表示我的意思 – Matt

+0

感谢您的回复马特,我明白那部分..设置数据,但是foreach部分我不需要通过使用getter获取数据...是这样的:$ this-> Template-> getData('loop');感谢您的时间:) – HireLee