Jag har redan löst problemet för några månader sedan... Jag postar svar, så detta kan vara till hjälp för andra utvecklare... p.s. Projektet skrevs i Yii 1.1
För det första i min HorseController tilldelad privat arraytypvariabel där jag ska behålla stamtavla:
private $horses = array();
Sedan skrev jag en funktion som hämtar alla noder (föräldrar) från databasen:
public function getParents($id)
{
global $horses;
$horses[] = Horses::model()->findByPk($id)->horse_id;
if($this->loadModel($id)->horse_sire != null && $this->loadModel($id)->horse_dam != null)
{
$this->getParents($this->loadModel($id)->horse_sire);
$this->getParents($this->loadModel($id)->horse_dam);
}
return $horses;
}
Sedan ändrade jag ActionView funktion, där alla noder från databasen skickas till View
public function actionView($id)
{
$this->horses = $this->getParents($id);
$this->render('view',array(
'model'=>$this->loadModel($id),
'parents'=>$this->horses,
));
}
Och till sist lite FUL KOD som kommer att visa stamtavla (som denna Stamtavlafråga ) :)
<table>
<?php
$reverse_multiplier = (count($parents)+1)/2;
$last_node_count = 0;
for($i = 0; $i < count($parents); $i++)
{
if($i == 0 && $last_node_count ==1)
echo "<tr>";
echo "<td rowspan='$reverse_multiplier'>";
echo "<a href=".Yii::app()->baseUrl."/index.php/horses/".Horses::model()->model()->findByPk($parents[$i])->horse_id." >";
echo Horses::model()->model()->findByPk($parents[$i])->horse_name;
echo "</a>";
echo "<br/>";
echo Horses::model()->model()->findByPk($parents[$i])->horse_yob;
echo "</td>";
if($reverse_multiplier == 1 || $reverse_multiplier == 0.5)
echo "</tr>";
if($reverse_multiplier == 0.5 && $last_node_count <= (count($parents)+1)/4)
$reverse_multiplier = (count($parents)+1)/8;
else
$reverse_multiplier = $reverse_multiplier/2;
if($last_node_count == (count($parents)+1)/4)
{
$reverse_multiplier = (count($parents)+1)/4;
$last_node_count=0;
}
if($reverse_multiplier == 0.5 || $reverse_multiplier == 1)
$last_node_count++;
}
?>
</table>
Och det var allt :) Hoppas det var till hjälp...