Параметр $page приходит нормально, ибо код
return $page;
exit;
без проблем выводит варианты 1, 2, 3, 4 и т.д.
А вот такой код
<?php
$output = '';
//return $page;
//exit;
switch ($page) {
case '1':
$output = $modx->getChunk('Mobile1');
break;
case "2":
$output = $modx->getChunk('Mobile2');
break;
case 3:
$output = $modx->getChunk('Mobile3');
break;
case 0:
$output = $modx->getChunk('Mobile4');
break;
}
return $output;
при любом варианте $page всегда срабатывает только на последнюю строчку, case 0.
В чём проблема? (это ModX Revo, подразумевается, что $page приходит в параметре $_GET)
Просмотрел эту "1" в hex редакторе. Получилась такая хрень:
<20><31><0D><0A><20><20><20><20><20><20><20><20>
пробел, 1, перенос строки и куча пробелов.
Теперь пытаюсь прикрутить
preg_replace('/[^0-9]/', '', $str);
вообще пустую строку выдаёт (
Вызывать сниппет надо так:
&tplWrapper=`@CODE: [[+output]] {{!mobile?page=[[+page]]}}`
Ну и выбор тогда так:
<?php
$output = '';
switch ((int)$page) {
case 1:
$output = $modx->getChunk('Mobile1');
break;
case 2:
$output = $modx->getChunk('Mobile2');
break;
case 3:
$output = $modx->getChunk('Mobile3');
break;
case 0:
$output = $modx->getChunk('Mobile4');
break;
}
return $output;
я бы на вашем месте сделал как-то так
$page = intval(trim($page));
$m = [4,1,2,3];
// $m = $page < 4 : $page : 0;
// $m = $page % 4;
$output = $modx->getChunk("Mobile{$m[$page]}");
для демонстрации проблемы вашего кода, и небольших раздумий о приведении типов и сравнении строк:
$page = " 1\r\n ";
switch($page){
case '1' : echo "ooops!"; break;
case "1" : echo 'oooooops!'; break;
case 1 : echo 'wow!'; break;
}
$page = 2;
$output = '';
switch ($page) {
case '1':
$output = '$modx->getChunk(Mobile1)';
break;
case "2":
$output = '$modx->getChunk(Mobile2)';
break;
case 3:
$output = '$modx->getChunk(Mobile3)';
break;
case 0:
$output = '$modx->getChunk(Mobile4)';
break;
}
echo $output;
у таракана уши не в ногах.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей