if(!preg_match_all("|<a.* href=(.*)>(.*)".$word."(.*)</a>|U",$text,$out)){
}
http://phpclub.ru/talk/threads/Замена-слов-ссылками-с-игнорированием-замены-внутри-ссылки.59457/
Полный текст примера из источника:
//Функция замены по маске
function GlossaryFilter($text){
//Прочли файл
$glossfile=@file($_SERVER['DOCUMENT_ROOT']."/cache/glossary.txt");
foreach($glossfile as $mask_word){
$token=explode("|",$mask_word);
//Если найдено слово из списка
if(stristr(trim($text),$token[0])){
//Проверка присутствие ключевого слова внутри ссылки
if(!preg_match_all("|<a.* href=(.*)>(.*)".$token[0]."(.*)</a>|U",$text,$out)){
//Заменяем его на ссылку
$text=str_replace($token[0],"<a href=\"".trim($token[1])."\" target=\"_blank\">".$token[0]."</a>",$text);
}
}
}
//Вернули текст
return $text;
}
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
В примере нужна реализация api для формы, отправляемой с помощью Angular JS. Данные отправляются в Request Payload (название из консоли Google Chrome) при этом массив $_POST — пуст.
Чтобы получить эти данные
В виде json:
echo file_get_contents('php://input');
В результате получим:
{"jsonrpc":"2.0","method":"Widget.ContactForm.sendMessage","id":"0","params":{"message":{"name":"Krylov","email":"[email protected]","address":"+78120000000","message":"test"},"placeholder":{"name":"Name *","email":"E-mail *","address":"Cell ","message":"Comment *"},"hash":"1@KfwalNFOU1rJqW8s4ffYsHg/zlhRhCTLd0XubaAkcVIxhpL227jVj+ZAWVdgge1+eCLe7c1ww+VOT4b26gDXlUvAl39DeMXMzCbqxgK9/e0O1VIIpXX8YYdD0za2rC0nsBHkw0/Ing7u+pYK5KoIpqk4L47Q7DtNRVbLglD6Fm0="}}
В виде массива:
print_r(json_decode(trim(file_get_contents('php://input')),true));
В результате получим:
Array
(
[jsonrpc] => 2.0
[method] => Widget.ContactForm.sendMessage
[id] => 0
[params] => Array
(
[message] => Array
(
[name] => Krylov
[email] => krylov@krylov.org.ua
[address] => +78120000000
[message] => test
)
[placeholder] => Array
(
[name] => Name *
[email] => E-mail *
[address] => Cell
[message] => Comment *
)
[hash] => 1@KfwalNFOU1rJqW8s4ffYsHg/zlhRhCTLd0XubaAkcVIxhpL227jVj+ZAWVdgge1+eCLe7c1ww+VOT4b26gDXlUvAl39DeMXMzCbqxgK9/e0O1VIIpXX8YYdD0za2rC0nsBHkw0/Ing7u+pYK5KoIpqk4L47Q7DtNRVbLglD6Fm0=
)
)
Пример простейшей обработки:
header('Content-Type: application/json');
$data=json_decode(trim(file_get_contents('php://input')),true);
if(count($data['params']['placeholder'])>0){
$message='';
foreach($data['params']['placeholder'] as $k=>$v){
$message.='<b>'.$v.':</b> '.$data['params']['message'][$k].'<br/>';
}
$from='=?utf-8?B?'.base64_encode('Site Name').'?=';
$subject='=?utf-8?B?'.base64_encode('Contact Form').'?=';
$headers="Content-Type: text/html; charset=utf-8\r\n";
$headers.="From: \"".$from."\"<noreply@".$_SERVER['HTTP_HOST'].">\r\n";
if(mail('[email protected]',$subject,$message,$headers)){
exit('{"result":true,"id":"'.$data['id'].'","jsonrpc":"2.0"}');
}
}
exit('{"error":{"code":-32600,"message":"Invalid Request","data":null},"id":null}');
Например при фильтре по цене от 7 до 8 с учетом скидки 3%
AND (`price`-(`price`*3/100))>="7" AND (`price`-(`price`*3/100))<="8"
Скрываем блок catalog_filter_item_multi_values при клике вне него. Также при открытии одного из блоков скрываем остальные. При повторном нажатии скрываем активный. При убирании мыши из области активного блока скрывать его.
$(document).click(function(event){
if($(event.target).closest(".catalog_filter_item_multi_values").length||$(event.target).closest(".catalog_filter_item_multi_title").length)return;
$(".catalog_filter_item_multi_values").fadeOut("slow");
event.stopPropagation();
});
$('.catalog_filter_item_multi').hover(function(){
},function(){
$(".catalog_filter_item_multi_values").fadeOut("slow");
});
$('.catalog_filter_item_multi_title').click(function(){
$('.catalog_filter_item_multi_values').not($(this).next()).hide();
$(this).next('.catalog_filter_item_multi_values').slideToggle();
});
<div class="catalog_filter_items_multi">
<div class="catalog_filter_item_multi">
<div class="catalog_filter_item_multi_title">Цвет</div>
<div class="catalog_filter_item_multi_values">
<label>бежевый <input type="checkbox" name="color[]" value="20"/><span></span></label>
<label>белый <input type="checkbox" name="color[]" value="7"/><span></span></label>
<label>черный <input type="checkbox" name="color[]" value="5"/><span></span></label>
</div>
</div>
<div class="catalog_filter_item_multi">
<div class="catalog_filter_item_multi_title">Материал</div>
<div class="catalog_filter_item_multi_values">
<label>дерево <input type="checkbox" name="mat[]" value="13"/><span></span></label>
<label>искусственная кожа <input type="checkbox" name="mat[]" value="3"/><span></span></label>
</div>
</div>
<div class="catalog_filter_item_multi">
<div class="catalog_filter_item_multi_title">Брэнд</div>
<div class="catalog_filter_item_multi_values">
<label>707 <input type="checkbox" name="brand[]" value="17218"/><span></span></label>
<label>Avenue <input type="checkbox" name="brand[]" value="17210"/><span></span></label>
</div>
</div>
</div>