Reputation:
i currently have 2 switch cases that basically use the same data, but has different returns (one switch case returns an image url, while the other returns a number), I don't think this is very good practice (Really Trying to code efficiently), Is there any chance of combining the two switch cases into one switch case?
Here they are:
function getImage($image,$image_url,$count){
switch ($image) {
case 1:
if($count == 1){
return "images/menu_slider/960x200/".basename($image_url);
}else if($count == 2){
return "images/menu_slider/595x200/".basename($image_url);
}else if($count == 6){
return "images/menu_slider/480x200/".basename($image_url);
}else{
return "images/menu_slider/470x200/".basename($image_url);
}
break;
case 2:
if($count == 2){
return "images/menu_slider/365x200/".basename($image_url);
}else if($count == 3 || $count == 4 ||$count == 5 ||$count == 6 ){
return "images/menu_slider/250x200/".basename($image_url);
}else if ($count == 7){
return "images/menu_slider/250x300/".basename($image_url);
}else{
return "images/menu_slider/250x400/".basename($image_url);
}
break;
case 3:
if($count == 3){
return "images/menu_slider/240x200/".basename($image_url);
}else{
return "images/menu_slider/240x100/".basename($image_url);
}
break;
case 4:
return "images/menu_slider/240x100/".basename($image_url);
break;
case 5:
if($count == 5){
return "images/menu_slider/960x100/".basename($image_url);
}else if($count == 6){
return "images/menu_slider/480x100/".basename($image_url);
}else if($count == 7){
return "images/menu_slider/235x100/".basename($image_url);
}else if($count == 8){
return "images/menu_slider/235x200/".basename($image_url);
}else{
return "images/menu_slider/235x141/".basename($image_url);
}
break;
case 6:
if($count == 6){
return "images/menu_slider/480x100/".basename($image_url);
}else if($count == 7){
return "images/menu_slider/235x100/".basename($image_url);
}else if($count == 8){
return "images/menu_slider/235x200/".basename($image_url);
}else{
return "images/menu_slider/235x141/".basename($image_url);
}
break;
case 7:
return "images/menu_slider/240x100/".basename($image_url);
break;
case 8:
return "images/menu_slider/240x100/".basename($image_url);
break;
case 9:
return "images/menu_slider/470x60/".basename($image_url);
break;
}
}
function getLinks($links,$count){
switch ($links) {
case 1:
if($count == 1){
//return "12 Links 4 Cols";
return 12;
}else{
//return "12 Links 2 Cols";
return 12;
}
break;
case 2:
if($count == 6){
//return "6 Links";
return 6;
}else if($count == 7){
//return "12 or 14 Links";
return 12;
}else{
//return "12 Links";
return 12;
}
break;
case 3:
if($count == 3){
//return "6 Links";
return 6;
}else{
//return "3 Links";
return 3;
}
break;
case 4:
//return "3 Links";
return 3;
break;
case 5:
if($count == 5){
//return "12 Links 4 col";
return 12;
}else if($count == 6){
//return "6 Links 2 cols";
return 6;
}else if($count == 7){
//return "3 Links";
return 3;
}else if($count == 8){
//return "6 or 8 Links";
return 6;
}else{
//return "4 Links";
return 4;
}
break;
case 6:
if($count == 6){
//return "6 Links 2 cols";
return 6;
}else if($count == 7){
//return "3 Links";
return 3;
}else if($count == 8){
//return "6 or 8 Links";
return 8;
}else{
//return "4 Links";
return 4;
}
break;
case 7:
//return "3 Links";
return 3;
break;
case 8:
//return "3 Links";
return 3;
break;
case 9:
//return "2 Links";
return 2;
break;
}
}
and they are called like so:
$linkCount = getLinks($counter,$count);
getImage($image,$image_url,$count);
I don't know if im being unnecessary, But it just doesn't seem logical to me...
Any Help Greatly Appreciated.
Here's the entire file if required:
<?php
$image_url = "";
//Conditional Images
function getLinks($links,$count){
switch ($links) {
case 1:
if($count == 1){
//return "12 Links 4 Cols";
return 12;
}else{
//return "12 Links 2 Cols";
return 12;
}
break;
case 2:
if($count == 6){
//return "6 Links";
return 6;
}else if($count == 7){
//return "12 or 14 Links";
return 12;
}else{
//return "12 Links";
return 12;
}
break;
case 3:
if($count == 3){
//return "6 Links";
return 6;
}else{
//return "3 Links";
return 3;
}
break;
case 4:
//return "3 Links";
return 3;
break;
case 5:
if($count == 5){
//return "12 Links 4 col";
return 12;
}else if($count == 6){
//return "6 Links 2 cols";
return 6;
}else if($count == 7){
//return "3 Links";
return 3;
}else if($count == 8){
//return "6 or 8 Links";
return 6;
}else{
//return "4 Links";
return 4;
}
break;
case 6:
if($count == 6){
//return "6 Links 2 cols";
return 6;
}else if($count == 7){
//return "3 Links";
return 3;
}else if($count == 8){
//return "6 or 8 Links";
return 8;
}else{
//return "4 Links";
return 4;
}
break;
case 7:
//return "3 Links";
return 3;
break;
case 8:
//return "3 Links";
return 3;
break;
case 9:
//return "2 Links";
return 2;
break;
}
}
function getImage($image,$image_url,$count){
switch ($image) {
case 1:
if($count == 1){
return "images/menu_slider/960x200/".basename($image_url);
}else if($count == 2){
return "images/menu_slider/595x200/".basename($image_url);
}else if($count == 6){
return "images/menu_slider/480x200/".basename($image_url);
}else{
return "images/menu_slider/470x200/".basename($image_url);
}
break;
case 2:
if($count == 2){
return "images/menu_slider/365x200/".basename($image_url);
}else if($count == 3 || $count == 4 ||$count == 5 ||$count == 6 ){
return "images/menu_slider/250x200/".basename($image_url);
}else if ($count == 7){
return "images/menu_slider/250x300/".basename($image_url);
}else{
return "images/menu_slider/250x400/".basename($image_url);
}
break;
case 3:
if($count == 3){
return "images/menu_slider/240x200/".basename($image_url);
}else{
return "images/menu_slider/240x100/".basename($image_url);
}
break;
case 4:
return "images/menu_slider/240x100/".basename($image_url);
break;
case 5:
if($count == 5){
return "images/menu_slider/960x100/".basename($image_url);
}else if($count == 6){
return "images/menu_slider/480x100/".basename($image_url);
}else if($count == 7){
return "images/menu_slider/235x100/".basename($image_url);
}else if($count == 8){
return "images/menu_slider/235x200/".basename($image_url);
}else{
return "images/menu_slider/235x141/".basename($image_url);
}
break;
case 6:
if($count == 6){
return "images/menu_slider/480x100/".basename($image_url);
}else if($count == 7){
return "images/menu_slider/235x100/".basename($image_url);
}else if($count == 8){
return "images/menu_slider/235x200/".basename($image_url);
}else{
return "images/menu_slider/235x141/".basename($image_url);
}
break;
case 7:
return "images/menu_slider/240x100/".basename($image_url);
break;
case 8:
return "images/menu_slider/240x100/".basename($image_url);
break;
case 9:
return "images/menu_slider/470x60/".basename($image_url);
break;
}
}
?>
<?php
$document = JFactory::getDocument();
$style= array();
?>
<?php foreach ($menu as $item): ?>
<?php
if($item->theme_title){
$class = $item->theme_title;
$style[] = '.'.$class.' > .cover {
color:'.$item->foreground_text_color.';
overflow: visible !important;
}';
$style[] = '.'.$class.' > .slide-background {
background:'.$item->background_color.';
color:'.$item->background_text_color.';
}';
$style[] = '.'.$class.' > .slide-background > ul > li > a{
color:'.$item->background_text_color.';
}';
$style[] = '.'.$class.' > .cover > span:before {
color:'.$item->icon_color.';
}';
}
?>
<?php endforeach; ?>
<?php foreach ($style as $css): ?>
<?php $document->addStyleDeclaration( $css ); ?>
<?php endforeach; ?>
<div id="grid-menu-slider" class="menu-slider">
<?php foreach (array_chunk($menu, 9) as $menu): ?>
<?php $counter = 0; ?>
<?php $count = count($menu); ?>
<div class="grid-box">
<div class="item-<?php echo $count ?>">
<?php foreach($menu as $items): ?>
<?php $counter++; ?>
<?php if ($items->menu_image) {
$image = $counter;
$image_url = $items->menu_image;
$background = "url(" . $theImage = getImage($image,$image_url,$count) .") no-repeat";
$shadow = 'shadow';
} else {
$shadow = NULL;
$background = $items->foreground_color.';';
}
$class = $items->theme_title;
?>
<?php $linkCount = getLinks($counter,$count); ?>
<div class="slide<?php echo $items->slide_direction; ?> box-<?php echo $counter ?> <?php echo $class; ?>">
<div class="cover <?php echo $shadow; ?>" style="background:<?php echo $background ?>;">
<span class="<?php echo 'icon-'.$items->icon; ?> <?php echo $shadow; ?>"><?php echo $items->menu_title; ?></span>
</div>
<div class="slide-background">
<?php foreach (array_chunk($items->submenu, $linkCount) as $items): ?>
<ul>
<?php foreach($items as $submenu): ?>
<?php echo $submenu; ?>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
</div>
<div class="clearfix"></div>
Upvotes: 0
Views: 1747
Reputation: 236
Your code is a bit messy, too much if/elseif/else makes code unreadable. Use arrays to manage that:
function getImage($image,$image_url,$count=null)
{
$imgArray=array(
1=>array(1=>'960x200',2=>'595x200',6=>'480x200','other'=>'470x200'),
2=>array(2=>'365x200',3=>'250x200',4=>'250x200',5=>'250x200',6=>'250x200',7=>'250x300','other'=>'250x400'),
3=>array(3=>'240x200','other'=>'240x100'),
4=>'240x100',
5=>array(5=>'960x100',6=>'480x100',7=>'235x100',8=>'235x200','other'=>'235x141'),
6=>array(6=>'480x100',7=>'235x100',8=>'235x200','other'=>'235x141'),
7=>'240x100',
8=>'240x100',
9=>'470x60'
);
if(!is_array($imgArray[$image]) && isset($imgArray[$image]))
$folder=$imgArray[$image];
elseif(isset($imgArray[$image]) && isset($imgArray[$image][$count]))
$folder=$imgArray[$image][$count];
elseif(isset($imgArray[$image]))
$folder=$imgArray[$image]['other'];
else
return false;
return "images/menu_slider/{$folder}/".basename($image_url);
}
function getLinks($links,$count=null){
$linkArray=array(
1=>12,
2=>array(6=>6,'other'=>12),
3=>array(3=>6,'other'=>3),
4=>3,
5=>array(5=>12,6=>6,7=>3,8=>6,'other'=>4),
6=>array(6=>6,7=>3,8=>8,'other'=>4),
7=>3,
9=>3,
9=>2
);
if(!is_array($linkArray[$links]) && isset($linkArray[$links]))
return $linkArray[$links];
elseif(isset($linkArray[$links]) && isset($linkArray[$links][$count]))
return $linkArray[$links][$count];
elseif(isset($linkArray[$links]))
return $linkArray[$links]['other'];
return false;
}
Upvotes: 0
Reputation: 119
You can create a function for building each url string :
if($count == 1){
return build_url("960x200",basename($image_url));
}else if($count == 2){
return build_url("595x200",basename($image_url));
}else if($count == 6){
return build_url("480x200",basename($image_url));
}else{
return build_url("470x200",basename($image_url));
}
Your function :
function build_url($size,$img_url)
{
return strtr("images/menu_slider/{size}/{img_url}",array('{size}'=>$size,'img_url'=>$img_url));
}
In this way, if you need to remake your url string in the future you will do it one time instead of rewriting each url.
Upvotes: 2
Reputation: 164
I dont know how to make this better, but I can suggest an alternative.
You can simply use an associative array. For egs.:
$images[1][1] = "images/menu_slider/960x200/%s";
$images[1][2] = "images/menu_slider/595x200/%s";
and so on...
Then, to access the image with $image as 1 and $count as 2, you could simply do:
$url = sprintf($images[$image][$count],basename($image_url));
Hope this helps...
Upvotes: 2