HTML и PHP эхо

Сегодня я закончил создавать свою разметку, поэтому я хотел переместить ее в php. Так что у меня есть навигатор.

<nav id="cd-vertical-nav">
<ul>
<li>
<a href="#destinations" data-number="1" class="">
<span class="cd-dot"></span>
<span class="cd-label">Choose Destinations</span>
</a>
</li>
<li>
<a href="#activities" data-number="2" class="">
<span class="cd-dot"></span>
<span class="cd-label">Activities</span>
</a>
</li>
<li>
<a href="#accommodation" data-number="3" class="">
<span class="cd-dot"></span>
<span class="cd-label">Accommodation</span>
</a>
</li>
<li>
<a href="#transportation" data-number="4" class="is-selected">
<span class="cd-dot"></span>
<span class="cd-label">Transportation</span>
</a>
</li>
<li>
<a href="#maspindzei" data-number="5" class="">
<span class="cd-dot"></span>
<span class="cd-label">Choose your Host</span>
</a>
</li>
<li>
<a href="#contactinfo" data-number="6" class="">
<span class="cd-dot"></span>
<span class="cd-label">Contact Information</span>
</a>
</li>
</ul>

Поэтому мне нужно сделать новую функцию, которая будет работать следующим образом.

CreateNewSection($secid);

Я попробовал этот код для этого.

function CreateNewSection($secid)
{
switch($secid)
{
case 1:
{
echo '<nav id="cd-vertical-nav">
<ul>
<li>
<a href="#destinations" data-number="1" class="">
<span class="cd-dot"></span>
<span class="cd-label">Choose Destinations</span>
</a>
</li></ul></nav>';
}
case 2:
{
echo '<nav id="cd-vertical-nav"><li><a href="#activities" data-number="2" class=""><span class="cd-dot"></span><span class="cd-label">Activities</span></a></li></li></ul></nav>';
}
}
}

Проблема в том, что когда я звоню ID 1, он все еще вызывает ID 2 тоже. Это мой первый раз, когда я конвертирую разметку в подобные функции.

1

Решение

Я настоятельно рекомендую отказаться от идеи подробного блока переключения. Есть более чистый способ …

Намного больше DRY и проще в управлении будет хранить динамические части вашего HTML в массиве, а затем просто вставлять эти значения в статический HTML. Позже вы поблагодарите себя за этот путь.

function CreateNewSection($secid,$class=''){
$secs=[
1=>['href'=>'#destinations','label'=>'Choose Destinations'],
2=>['href'=>'#activities','label'=>'Activities'],
3=>['href'=>'#accommodation','label'=>'Accommodation'],
4=>['href'=>'#transportation','label'=>'Transportation'],
5=>['href'=>'#maspindzei','label'=>'Choose your Host'],
6=>['href'=>'#contactinfo','label'=>'Contact Information']
];

if(!isset($secs[$secid])){
// echo some default behavior or error message
}else{
$sec=$secs[$secid]; // merely to shorten the variable
echo "<li>";
echo "<a href=\"{$sec['href']}\" data-number=\"{$secid}\" class=\"{$class}\">";
echo "<span class=\"cd-dot\"></span>";
echo "<span class=\"cd-label\">{$sec['label']}</span>";
echo "</a>";
echo "</li>";
}
}
echo "<nav id=\"cd-vertical-nav\">";
echo "<ul>";
$selected=4;
for($x=1; $x<7; ++$x){
CreateNewSection($x,($x==$selected?'is-selected':''));
}
echo "</ul>";
echo "</nav>";

* обратите внимание, у меня есть {} в скобках все переменные в эхо (даже если строковые переменные не требуют этого), чтобы эти переменные выделялись в вашем текстовом редакторе (или они мог если ваш редактор настроен на это).

1

Другие решения

Вот как Переключатель регистра должен быть, каждый case имеет break и тогда есть default в конце:

switch($secid)
{
case 1:
// code here....
break;

case 2:
// code here....
break;

default:
// code here....
}

Таким образом, ваш код должен быть обновлен, как показано ниже:

function CreateNewSection($secid)
{
switch($secid)
{
case 1:
echo '<nav id="cd-vertical-nav">
<ul>
<li>
<a href="#destinations" data-number="1" class="">
<span class="cd-dot"></span>
<span class="cd-label">Choose Destinations</span>
</a>
</li></ul></nav>';
break;

case 2:
echo '<nav id="cd-vertical-nav"><li><a href="#activities" data-number="2" class=""><span class="cd-dot"></span><span class="cd-label">Activities</span></a></li></li></ul></nav>';
break;
}
}
2

В конце корпуса переключателя отсутствует разрыв, из-за чего он проваливается.

function CreateNewSection($secid)
{
switch($secid)
{
case 1:
echo '<nav id="cd-vertical-nav">
<ul>
<li>
<a href="#destinations" data-number="1" class="">
<span class="cd-dot"></span>
<span class="cd-label">Choose Destinations</span>
</a>
</li></ul></nav>';
break;
case 2:
echo '<nav id="cd-vertical-nav"><li><a href="#activities" data-number="2" class=""><span class="cd-dot"></span><span class="cd-label">Activities</span></a></li></li></ul></nav>';
break;
}
}
1

Оператор switch является формой цикла, и для успешного выполнения цикла необходимо добавить оператор break в конце каждого блока оператора case. Синтаксис выглядит так

switch($param){

case $value1: // executes if $param = $value1

//execute your code

break; //the break statement forces the processing out of the loop after execution

case $value2: // executes if $param = $value2

//execute your code

break; //the break statement forces the processing out of the loop after execution

default:
//code here executes only if the case 1 and 2 is not matched

}

Имея это в виду, ваш код должен выглядеть следующим образом

function CreateNewSection($secid)
{
switch($secid)
{
case 1:
echo '<nav id="cd-vertical-nav">
<ul>
<li>
<a href="#destinations" data-number="1" class="">
<span class="cd-dot"></span>
<span class="cd-label">Choose Destinations</span>
</a>
</li></ul></nav>';
break;

case 2:

echo '<nav id="cd-vertical-nav"><li><a href="#activities" data-number="2" class=""><span class="cd-dot"></span><span class="cd-label">Activities</span></a></li></li></ul></nav>';
break;
}

}

Надеюсь, что это помогает вам! Если у вас есть какие-либо проблемы, пожалуйста, прокомментируйте и разрешите их.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector