Reputation: 7128
I am using builder in my model and print data in blade,
The issue is my data are stored in database with short-names so I want to write actual names when they print in blade and not just to return those short-names but I can't get if statement to work in my builder.
public function buildFooter($footer, $positionid = 'footer')
{
$result = null;
foreach($footer as $item)
if($item->type == $positionid) {
$result .= "<li class='dd-item nested-list-item' data-position='{$item->position}' data-id='{$item->id}'>
<div class='dd-handle nested-list-handle'>
<i class='fas fa-arrows-alt'></i>
</div>
<div class='nested-list-content'>
//if part
if('{$item->widget}' == 'feature-posts')
Feature Posts
elseif('{$item->widget}' == 'feature-posts-sidebar')
Feature Posts (Sidebar)
elseif('{$item->widget}' == 'top-categories-posts')
Top Categories (By Posts)
elseif('{$item->widget}' == 'top-categories-visits')
Top Categories (By Visits)
else
Popular Posts
endif
//if part
- {$item->status}
<div class='float-right'>
<a href=''>Edit</a> |
<a href='#' class='delete_toggle' rel='{$item->id}'>Delete</a>
</div>
</div>".$this->buildFooter($footer, $item->id) . "</li>";
}
return $result ? "\n<ol class=\"dd-list\">\n$result</ol>\n" : null;
}
// Getter for the HTML menu builder
public function getHTMLFooter($items)
{
return $this->buildFooter($items);
}
syntax error, unexpected end of file, expecting elseif (T_ELSEIF) or else (T_ELSE) or endif (T_ENDIF)
Any idea?
Ok i figured there was issue in my blade that I got error but now that my blade loads I get data like this:
public function buildFooter($footer, $positionid = 'footer')
{
$result = null;
foreach($footer as $item)
if($item->type == $positionid) {
$result .= "<li class='dd-item nested-list-item' data-position='{$item->position}' data-id='{$item->id}'>
<div class='dd-handle nested-list-handle'>
<i class='fas fa-arrows-alt'></i>
</div>
<div class='nested-list-content'>
//if part
if($item->widget == 'feature-posts')
Feature Posts
elseif($item->widget == 'feature-posts-sidebar')
Feature Posts (Sidebar)
elseif($item->widget == 'top-categories-posts')
Top Categories (By Posts)
elseif($item->widget == 'top-categories-visits')
Top Categories (By Visits)
else
Popular Posts
endif
// if part
- {$item->status}
<div class='float-right'>
<a href=''>Edit</a> |
<a href='#' class='delete_toggle' rel='{$item->id}'>Delete</a>
</div>
</div>".$this->buildFooter($footer, $item->id) . "</li>";
}
return $result ? "\n<ol class=\"dd-list\">\n$result</ol>\n" : null;
}
// Getter for the HTML menu builder
public function getHTMLFooter($items)
{
return $this->buildFooter($items);
}
Based on suggestion in comments I've made changes below
added ".
and ."
around if and some changes in return texts li adding ''
around them.
//code
<div class='nested-list-content'>".
if ($item->widget == 'feature-posts'){
'Feature Posts'
} elseif ($item->widget == 'feature-posts-sidebar') {
'Feature Posts (Sidebar)'
} elseif ($item->widget == 'top-categories-posts') {
'Top Categories (By Posts)'
} elseif ($item->widget == 'top-categories-visits') {
'Top Categories (By Visits)'
} else {
'Popular Posts'
}
- {$item->status}
."<div class='float-right'>
//code
and now i get
syntax error, unexpected 'if' (T_IF)
On
if ($item->widget == 'feature-posts'){
Upvotes: 1
Views: 89
Reputation: 152
You have missed some " and ', Kindly try this below,
public function buildFooter($footer, $positionid = 'footer'){
$result = null;
foreach($footer as $item)
if($item->type == $positionid) {
$result .= "<li class='dd-item nested-list-item' data-position='{$item->position}' data-id='{$item->id}'>";
$result .= "<div class='dd-handle nested-list-handle'><i class='fas fa-arrows-alt'></i></div><div class='nested-list-content'>";
if ($item->widget == 'feature-posts'){
$result .= "Feature Posts";
} elseif ($item->widget == 'feature-posts-sidebar') {
$result .= "Feature Posts (Sidebar)";
} elseif ($item->widget == 'top-categories-posts') {
$result .= "Top Categories (By Posts)";
} elseif ($item->widget == 'top-categories-visits') {
$result .= "Top Categories (By Visits)";
} else {
$result .= "Popular Posts";
}
$result .="-".$item->status;
$result .="<div class='float-right'><a href='#' class='delete_toggle text-danger' rel='{$item->id}'>Delete</a></div></div>".$this->buildFooter($footer, $item->id) . "</li>";
}
return $result ? "\n<ol class=\"dd-list\">\n$result</ol>\n" : null;
}
Upvotes: 1
Reputation: 1833
Can you try this?
I am sure there are other ways to achieve this. Your approach is mixing up views and controller actions.
<?php
public function buildFooter($footer, $positionid = 'footer')
{
$result = null;
foreach($footer as $item)
if($item->type == $positionid) {
$result .= "
<li class='dd-item nested-list-item' data-position='"
. $item->position
."' data-id='".$item->id."'>
<div class='dd-handle nested-list-handle'>
<i class='fas fa-arrows-alt'></i>
</div>
<div class='nested-list-content'>";
//if part
if($item->widget == 'feature-posts'):
$result .= "Feature Posts";
elseif($item->widget == 'feature-posts-sidebar'):
$result .= "Feature Posts (Sidebar)";
elseif($item->widget == 'top-categories-posts'):
$result .= "Top Categories (By Posts)";
elseif($item->widget == 'top-categories-visits'):
$result .= "Top Categories (By Visits)";
else:
$result .= "Popular Posts";
endif;
// if part
$result .= "- " . $item->status
."<div class='float-right'>
<a href=''>Edit</a> |
<a href='#' class='delete_toggle' rel='{$item->id}'>Delete</a>
</div>
</div>".$this->buildFooter($footer, $item->id) . "</li>";
}
return $result ? "\n<ol class=\"dd-list\">\n".$result."</ol>\n" : null;
}
// Getter for the HTML menu builder
public function getHTMLFooter($items)
{
return $this->buildFooter($items);
}
Upvotes: 1