Все, поправил. Проверяйте. Особенно бесплатные номера http://nomerok.ru/krasiviy-nomer-besplatno.html (что-то у меня сомнения, должно ли там быть столько много номеров).
Но в целом у вас там, конечно, все очень плохо. Для обычных запросов один сниппет, для Ajax - другой. Куча всяких параметров, разбросанных по двум тысячам строк. Это все вообще не правильно. Вот, к примеру, условие для обычных запросов:
А вот для Ajax:
Почему в одном случае есть условие по маске, а в другом нет? Вот, в итоге, и поведение такое, что при заходе на страницу с маской поиска в адресной строке выполнялся поиск, а далее при Ajax-запросах нет. Раньше у вас это работало, потому что задублировано все было в два сниппета отдельных, а сейчас логика объединена в один сниппет. Но косяки лезут и скорее всего еще будут, потому что у вас по 500 строк в блоке
if($get['action'] == 'searchNumber' || $id == 53 ||(isset($mask)&& trim($mask)!='')){....
и еще 500 в else.
Так не должно делаться. Должно быть единое формирование запроса со входящими параметрами типа $operator_id, $max_cost, $min_cost и т.п. А у вас там что?
if($get['action'] == 'searchNumber' || $id == 53 ||(isset($mask)&& trim($mask)!='')) {
$mask = (is_numeric($_REQUEST['mask'])) ? $_REQUEST['mask'] : maskFormat(strtolower($_REQUEST['mask']));
unset($sql);
unset($result);
unset($re);
unset($arr);
unset($prices);
$prices = array();
$codes = array();
$count = 0;
if($id!=53 && (isset($mask)&& trim($mask)!='' && isset($type))) {
$type = $type;
}else{
$type='all';
}
$cost_from = !empty($cost_from) ? $cost_from : 0;
$cost_to = !empty($cost_to) || $cost_to === 0 ? $cost_to : 9999999;
Что это за солянка из кучи запросов, включая глобальные переменные?
А формирование запросов?
if($id==53){
$sql="
SELECT * FROM `modx_numbers`
where
cost_sale=-1
and cost=0
AND tip_nomera=2
{$sql_ord}
UNION ALL
SELECT * FROM `modx_numbers`
where
cost_sale=0
AND tip_nomera=2
{$sql_ord}";
}else{
$sql="
SELECT * FROM `modx_numbers`
where
cost_sale=-1
and cost<{$cost_to}
AND cost>= {$cost_from}
{$sql_type}
{$sql_ord}
{$op}
UNION ALL
SELECT * FROM `modx_numbers`
where
cost_sale<{$cost_to}
AND cost_sale>= {$cost_from}
{$sql_type}
{$sql_ord}
{$op}";
}
Что это? Почему вы работаете на MODX с программистами, которые не слышали про xPDO и пишут запросы на чистом SQL?
Но и это еще не предел. Предел вот это:
$sql="
SELECT * FROM `modx_numbers`
where operid={$oper_id}
AND cost_sale=-1
and cost<{$cost_to}
AND cost>= {$cost_from}
{$sql_type}
{$sql_ord}
UNION ALL
SELECT * FROM `modx_numbers`
where operid={$oper_id}
and cost_sale<{$cost_to}
AND cost_sale>= {$cost_from}
{$sql_type}
{$sql_ord}
{$sort}
LIMIT {$offset}, {$limit}
";
$result = $modx->query($sql);
$sql="
SELECT count(*) FROM `modx_numbers`
where operid={$oper_id}
AND cost_sale=-1
and cost<{$cost_to}
AND cost>= {$cost_from}
{$sql_type}
{$sql_ord}
UNION ALL
SELECT count(*) FROM `modx_numbers`
where operid={$oper_id}
and cost_sale<{$cost_to}
AND cost_sale>= {$cost_from}
{$sql_type}
{$sql_ord}
";
Зачем он для подсчета количества найденных строк использует полный дубль запроса??? Запихнул бы уже тогда параметры * и count(*) в переменные, и вставлял в запрос-заготовку.
В общем, совсем не удивляйтесь, что столько времени ушло. Я взял с вас денег за полтора часа, а потратил часов десять. И за оговоренный функционал доплату не попросил. Другой бы вообще давно потерялся бы и все.