• Как настроить релевантность поиска PHP + MySQL?

    @alabs Автор вопроса
    Проблему решил в рамках php + mysql. Поиск не нагруженный на сайте. Вот решение:

    Завел словарь моделей.
    <?
    	$slovar = array(
    		'iphone 6' => 'iphone 6',
    		'6 iphone' => 'iphone 6',
    		'iphone 6s' => 'iphone 6s',
    		'6s iphone' => 'iphone 6s',
    		'iphone 7' => 'iphone 7',
    		'7 iphone' => 'iphone 7',
    		'iphone 7s' => 'iphone 7s',
    		'7s iphone' => 'iphone 7s',
    	);


    Далее в поисковой строке заменяю все словосочетания, на словосочетания где вместо пробела нижнее подчеркивание. После разбивки поискового запроса на слова возвращаю пробелы на место.

    $tmp = substr( $tmp, 0, 40 ); //обрезаем строку
    //делаем массив с подчеркиваниями
    		foreach($slovar as $k=>$v){
    			$arr1[] = $k;
    			$arr2[] = str_replace(" ", "_", $v);
    		} 
    //заменяем в поисковом запросе словосочетания
    		$tmp =  str_replace($arr1, $arr2, $tmp);
    //бьем поисковую строку  на пробелы
    		$tmp = explode( ' ', $tmp );
    //пробелы заменяем на конструкцию SQL
    		$where = "`title` LIKE '%" . implode ( "%' AND `title` LIKE '%", $tmp ) . "%'";
    //возвращаем в запрос обратно пробелы
    		$where =  str_replace("_", " ", $where);
    Ответ написан
    Комментировать
  • Curl выдает false. Что делать?

    @alabs Автор вопроса
    Решил вопрос другим методом:
    function gateway($method, $data) {
    	$context = stream_context_create(array(
    	  'http' => array(
    		'method' => 'POST',
    		'header' => 'Content-Type: application/x-www-form-urlencoded',
    		'content' => http_build_query($data),
    		'protocol_version' => 1.1,
    		'timeout' => 10,
    		'ignore_errors' => true
    	  )
    	));
    	$response = file_get_contents(GATEWAY_URL.$method, false, $context);
    	$response = json_decode($response, true); // Декодируем из JSON в массив
        return $response; // Возвращаем ответ
    }
    Ответ написан
    1 комментарий
  • Как на Sphinx перезапустить real time индекс?

    @alabs Автор вопроса
    Решил проблему просто создание похожего индекса с другим именем. Если есть более правильные решения, то прошу сообщить.
    Ответ написан
    Комментировать
  • Какой использовать календарь с выбором интервала и с учетом недоступных дат?

    @alabs Автор вопроса
    Если кому интересно, на обычный UI Datapicker написал.
    Warning! Возможны баги.
    <style>
    		.ui-datepicker-calendar td{
    			padding:0 !important;
    		}
    		.dp-highlight .ui-state-default {
    			background: #484;
    			color: #FFF;
    		}
    	</style>
    	<script>
     
    		$(function() {
    			var array = ["2015-09-27","2013-03-15","2013-03-16"];
    			
    			$("#datepicker").datepicker({
    				beforeShowDay: function(date) {
    					var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#input1").val());
    					var date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#input2").val());
    					var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
    					
    					if(array.indexOf(string) != -1){
    						return [false, ""];
    					}else{
    						return [true, date1 && ((date.getTime() == date1.getTime()) || (date2 && date >= date1 && date <= date2)) ? "dp-highlight" : ""];
    					}					
    					
    				},
    				minDate:1,
    				onSelect: function(dateText, inst) {
    					var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#input1").val());
    					var date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#input2").val());
    					if (!date1 || date2) {
    						$("#input1").val(dateText);
    						$("#input2").val("");
    						if($(this).datepicker("option", "minDate")<$("#input1").val(dateText)){
    							$(this).datepicker("option", "minDate", dateText);
    						}						
    					} else {
    						$("#input2").val(dateText);
    						$(this).datepicker("option", "minDate", $(this).datepicker("option", "minDate"));
    					}
    				}
    			});
    		});
    	</script>
    Ответ написан
    Комментировать