Перейти к публикации

AnteFil

новички
  • Публикации

    47
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    1

Сообщения, опубликованные пользователем AnteFil

  1. 7 часов назад, alex32 сказал:

    Куки, сессии, гет, пост, протоколы, зачем спрашивал про кэш вообще непонятно, и на финал 

    
     else {
    	echo $config['allow_alt_url'];

    И вся эта каша ради того, что бы вывести несколько записей из БД...

    Это я забыл удалить. Просто хотел посмотреть что хранит!

    Про кеш спрашивал хотел полостью выдачу поместить в кеш, но потом передумал так как кеш превратиться в некую базу данных ещё одну по этому решил выдачу не отправлять в кеш а написал так 

    $name_cache = md5(implode('_', $config['skin']));
    
    $kol_zapis = dle_cache($city.'_'.$name_cache, $r_strok, 43200); // достаём из кеша данные
    if($kol_zapis == false ) {
    	$sql_kol_zap = $db->query( "SELECT * FROM " . PREFIX . "_mod_job WHERE 	city_may LIKE '" . $db->safesql($city) . "%' AND (`name_vakansiya` LIKE '%". $db->safesql($vakansiya) . "%' OR `name_sinonim` LIKE '%". $db->safesql($vakansiya) . "%') AND `category_id` LIKE '%" . $db->safesql($categor) . "%' AND `activ`='1'");
    	$kol_vo_zapis = $db->num_rows($sql_kol_zap);
    	create_cache($city.'_'.$name_cache, $kol_vo_zapis);// количество записей отправляем в кеш
    }

    Количество записей в базе отправил туда для навигации,

  2. Вообщем выкладываю пока небольшую наработку. Так как это первый подобный модуль мой в DLE если кто знает как сделать что то лучше буду только за. Советы, рекомендации и конструктивную критику. Это пока только пользовательская часть.

    Страница поиска верх.

    sc1.jpg

    Страница поиска низ!

     

    sc2.jpg

     

    Страница профиля

    sc3.jpg

     

    Ссылка на сам мод с файлами там же есть небольшая инструкция по установке.

    https://yadi.sk/d/R41GgXHh1uVdJw

    Самую основную страницу публикую тут с моими комментариями

    <?php
    if( !defined('DATALIFEENGINE') ) {
    	header( "HTTP/1.1 403 Forbidden" );
    	header ( 'Location: ../../' );
    	die( "Hacking attempt!" );
    }
    header('Cache-Control: no cache'); //no cache
    //session_cache_limiter('private_no_expire'); // works
    session_start();
    //Начинаем ловить город любыми путями GET, POST, COOKIE
    $city = $_GET['city'] ?? $_POST['city'] ?? $_COOKIE['CookieCity'] ?? null;
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http';
    
    if (!empty($city)) {
    	setcookie("CookieCity", $city, time()+3600*24*20, $_SERVER['SERVER_NAME']);/* срок действия 30 дней */
    } 
    //Если так и не нашли идём на api.dadata.ru что бы выяснить город по ip
    if(empty($_COOKIE['CookieCity'])){ 
    		
    $headers=array( 'user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36', 
    				'accept: application/json',
    				'Content-Type: application/json',
    				'Authorization: Token (Здесь токен)',			
    				'Accept-Charset: utf-8'); 
    $ch = curl_init('https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip='.$_SERVER['REMOTE_ADDR'].'');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_HEADER, false);
    $data_sdati = curl_exec($ch);
    curl_close($ch);	
    $mas_data = json_decode($data_sdati, true);
    
    $city = $mas_data['location']['data']['city'];
    
    }
    //протокол и город сохраняем в сессию
    $_SESSION['city'] = $city;
    $_SESSION['protocol'] = $protocol;
    //эта проверка делит код на две части для двух страниц
    if($_GET['jobfull']==''){
    $vakansiya = $_GET['vakansiya'];
    
    if($_GET['categor']!='') {
    	$sql_categor12 = $db->query("SELECT * FROM `" . PREFIX . "_mod_job_categor` WHERE `id`= '".$db->safesql($_GET['categor'])."'");
    	$categor_vac12 = $db->get_row($sql_categor12);
    	$categor = $categor_vac12['name_categor'];
    	setcookie("CookieCategor", $categor, time()+3600*24*20, $_SERVER['SERVER_NAME']);/* срок действия 30 дней */
    }	
    
    if($_GET['del_kat']=='ok'){
    	unset($_COOKIE['CookieCategor']);
    	unset($categor);
    }
    
    $name_cache = md5(implode('_', $config['skin']));
    
    $kol_zapis = dle_cache($city.'_'.$name_cache, $r_strok, 43200); // достаём из кеша данные
    if($kol_zapis == false ) {
    	$sql_kol_zap = $db->query( "SELECT * FROM " . PREFIX . "_mod_job WHERE 	city_may LIKE '" . $db->safesql($city) . "%' AND (`name_vakansiya` LIKE '%". $db->safesql($vakansiya) . "%' OR `name_sinonim` LIKE '%". $db->safesql($vakansiya) . "%') AND `category_id` LIKE '%" . $db->safesql($categor) . "%' AND `activ`='1'");
    	$kol_vo_zapis = $db->num_rows($sql_kol_zap);
    	create_cache($city.'_'.$name_cache, $kol_vo_zapis);// количество записей отправляем в кеш
    }
    
    $num = 17;
    // Извлекаем из URL текущую страницу
    $page = $_GET['p'];
    // Определяем общее число сообщений в базе данных
    
    // Находим общее число страниц
    $total = intval(($kol_zapis - 1) / $num) + 1;
    // Определяем начало сообщений для текущей страницы
    $page = intval($page);
    // А если слишком большое, то переходим на последнюю
    if(empty($page) or $page < 0) $page = 1;
      if($page > $total) $page = $total;
    // Вычисляем начиная к какого номера
    // следует выводить сообщения
    $start = $page * $num - $num;
    
    $sql_vacansii = $db->query( "SELECT * FROM " . PREFIX . "_mod_job WHERE city_may LIKE '" . $db->safesql($city) . "%' AND (`name_vakansiya` LIKE '%". $db->safesql($vakansiya) . "%' OR `name_sinonim` LIKE '%". $db->safesql($vakansiya) . "%') AND `category_id` LIKE '%" . $db->safesql($categor) . "%' AND `activ`='1' ORDER BY `id` desc limit ".$start.", ".$num."");
    $nomer = $db->num_rows($sql_vacansii);
    
    
    // Формируем ссылку для удаления категории
    if($categor!='') { $categor_del = "Вакансии в категории ".$categor." | <a href='../../вакансии/?del_kat=ok'><b>очистить категорию</b></a></p>";}
    $tpl->load_template( 'mod_rab/form_search.tpl' );
    $tpl->set('{city}', $city);
    $tpl->set('{vakansiya}', $vakansiya);
    $tpl->set('{categor}', $categor);
    $tpl->set('{categor_del}', $categor_del);
    $tpl->compile('form_search');
    echo $tpl->result['form_search'];
    
    
    $tpl->load_template( 'mod_rab/result_search.tpl' );
    
    	while ($row = $db->get_row($sql_vacansii)) {
    		$region = $row['region_code_kladr'];
    		$city_ssilka = '../../вакансии/'.$city.'/'.$row['id'].'.html';
    		$postalCode = substr($row['address'], 0, 6);
    	   $tpl->set('{postalCode}', $postalCode);
           $tpl->set('{vakansiya}', $row['name_vakansiya']);
    	   $tpl->set('{address}', $row['address']);
    	   $tpl->set('{salary}', $row['salary_min']);
    	   $tpl->set('{vac_url}', $row['vac_url']);
    	   $tpl->set('{company_name}', $row['company_name']);
    	   $tpl->set('{aktiv-date}', $row['aktiv-date']);
    	   $tpl->set('{off-date}', $row['date_to']);
    	   $tpl->set('{opisanie}', $row['opisanie_job']);
    	   $tpl->set('{categor}', $row['category_may']);
    	   $tpl->set('{region_name}', $row['region_name']);
    	   $tpl->set('{id_vac}', $row['id']);
    	   $tpl->set('{email}', $row['company_email']);
    	   $tpl->set('{city}', $city);
    	   $tpl->set('{city_ssilka}', $city_ssilka);
    	   if($row['company_phone']=='') { $phone = "<a href=".$row['vac_url']." rel='nofollow' target='_blank'>Тел. не указан подробно на сайте - <i>".$row['sait_name']."</i></a>";} else { $phone = "<a href='tel:".$row['company_phone']."'>Тел. ".$row['company_phone']."</a>";}
    	   $tpl->set('{phone}', $row['company_phone']);
    	   $tpl->compile('poisk_vak');
    	   
        }
    $_SESSION['region'] = $region;
    echo $tpl->result['poisk_vak'];	
    
    
    if(!empty($vakansiya)){ $vacans='/'.$vakansiya.'/';	} else { $vacans='/'; }
    if(!empty($categor)){ $cat_slesh='&categor='.$categor;	} else { $cat_slesh=''; }
    if($nomer>0){ $text_pod="<i><h3 class='h3 title'>В городе ".$city." найдены свежие вакансии</h3></i>"; } else { $text_pod="<h3 class='h3 title'>Хорошо, свежие вакансии в двух кликах</h3>"; }
    
    //Поехала постраничная навигация
    
    // Проверяем нужны ли стрелки назад
    if ($page != 1) $pervpage = "<a href=".$protocol."://".$_SERVER['SERVER_NAME']."/%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8/".$city.$vacans."?p=1".$cat_slesh."><<</a>
                                   <a href=".$protocol."://".$_SERVER['SERVER_NAME']."/%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8/".$city.$vacans."?p=". ($page - 1) .$cat_slesh."><</a>";
    // Проверяем нужны ли стрелки вперед
    if ($page != $total) $nextpage = "<a href=".$protocol."://".$_SERVER['SERVER_NAME']."/%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8/".$city.$vacans."?p=". ($page + 1) .$cat_slesh.">></a>
                                       <a href=".$protocol."://".$_SERVER['SERVER_NAME']."/%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8/".$city.$vacans."?p=" .$total.$cat_slesh. ">>></a>";
    
    // Находим две ближайшие станицы с обоих краев, если они есть
    if($page - 2 > 0) $page2left = "<a href=".$protocol."://".$_SERVER['SERVER_NAME']."/%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8/".$city.$vacans."?p=". ($page - 2) .$cat_slesh.">". ($page - 2) ."</a> | ";
    if($page - 1 > 0) $page1left = "<a href= ".$protocol."://".$_SERVER['SERVER_NAME']."/%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8/".$city.$vacans."?p=". ($page - 1) .$cat_slesh.">". ($page - 1) ."</a> | ";
    if($page + 2 <= $total) $page2right = " | <a href=".$protocol."://".$_SERVER['SERVER_NAME']."/%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8/".$city.$vacans."?p=". ($page + 2) .$cat_slesh.">". ($page + 2) ."</a>";
    if($page + 1 <= $total) $page1right = " | <a href=".$protocol."://".$_SERVER['SERVER_NAME']."/%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8/".$city.$vacans."?p=". ($page + 1) .$cat_slesh.">". ($page + 1) ."</a>";
    
    
    echo '<center>'.$pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage.'</center></br>';
    
    
    $tpl->clear();
    $db->free();
      
    } else {
    echo $config['allow_alt_url'];
    // Собираем страницу для полной версии вакансии	
    $sql_kjob = $db->query( "SELECT * FROM " . PREFIX . "_mod_job WHERE id='".$db->safesql($_GET['jobfull'])."'");
    $row_job = $db->get_row($sql_kjob);
    
    $tpl->load_template( 'mod_rab/full_job.tpl' );
    $tpl->set('{name_vakansiya}', $row_job['name_vakansiya']);
    $tpl->set('{zarplata}', $row_job['salary_min']);
    $tpl->set('{telefon}', $row_job['company_phone']);
    $tpl->set('{email}', $row_job['company_email']);
    $tpl->set('{opisanie}', $row_job['opisanie_job']);
    $tpl->set('{date}', $row_job['aktiv-date']);
    $tpl->set('{company_name}', $row_job['company_name']);
    $tpl->set('{categor}', $row_job['category_may']);
    $tpl->set('{city}', $city);
    $tpl->set('{address}', $row_job['address']);
    $tpl->set('{ogrn}', $row_job['company_ogrn']);
    $tpl->set('{geo_lat}', $row_job['geo_lat']);
    $tpl->set('{geo_lon}', $row_job['geo_lon']);
    $tpl->compile('full_job');
    echo $tpl->result['full_job'];
    }
    
    ?>

     

  3. В 08.07.2020 в 17:56, alex32 сказал:

    Может, не стоит  советовать, кому и что мне советовать? Почему бы и не выложить? Другим посмотреть полезно будет.

    Как кешировать запрос в sql ?

    $sql_vac = $db->query( "SELECT * FROM " . PREFIX . "_mod WHERE 	city = 'Москва'");
    
    $mymod = dle_cache('search_city',  86400, $sql_vac); // проверяем кэш
    
    if($mymod == false) { 
    echo 'Старый кеш';
    } 
    while ($vak_one = $db->get_row($mymod)) {
           $tpl->set('{name}', $vak_one['name']);
    	   $tpl->set('{add}', $vak_one['add']);
    	   $tpl->compile('poisk');
    	   
        }

    Но чёт ни чего не кешируется? Да и вообще всё на ура продолжает работать если сам запрос не указываю $db->get_row().

    Как запрос кешировать?

  4. Подскажите почему SQL не отдаёт запрос в php. Разрабатывал модуль не денвере переустановил на опен офис так как были проблемы теперь мой разрабатываемый модуль не работает. Сам движёк работает а вот когда обращаюсь к модулу то всё рубиться по тайм ауту

    Fatal error: Maximum execution time of 60 seconds exceeded in C:\OpenServer\OpenServer\domains\test.ru\engine\classes\mysql.php on line 88

    запрос в базу отправляет, но с базы почему то не забирает!

  5. Поясните пожалуйста логику как вывести что то в шаблон.

    У меня страничка модуля mod.php на ней я делаю так 

    $tpl->load_template( 'categor.tpl' ); // Загружаю шаблон
    $tpl->set('{categor_vac}', $categor_vac['category']); // тут передаю шаблону данные
    $tpl->compile('categor_vac');// я не понимаю что происходит здесь 
    $tpl->result['poisk_vak']; //и я не понимаю что происходит здесь
    
    Что бы отправить на печать я делаю так 
    $module_start = $tpl->result['poisk_vak'];
    echo $module_start; // печатаем

    Кто-нибудь проясните ситуацию и что делает copy_template ?

    И как два шаблона.tpl подключить? Можно использовать два раза load_template ?

    Важно! Поясните логику!

  6. Вообщем возник вопрос не знаю насколько это относиться к DLE  поясню всю суть проблемы. Не могу током обработать GET данные.

    Решил я сразу делать в нормальном русле. Для этого в .htaccess прописал правило.

    RewriteRule ^rab/$  index.php?do=rab [QSA]
    RewriteRule ^rab/(.*)/$ index.php?do=rab&city=$1 [QSA]
    RewriteRule ^rab/(.*)/(.*)/$  index.php?do=rab&city=$1&vakansiya=$2 [QSA]

    Вообще такое чувство что всё живёт своей жизнью так как правила сначала работали потом нет чё происходит не знаю. Теоретически правила работают это комп чёт моросит.

    Я добился того что всё работало так из адресной строки /rab/город/вакансия/ сейчас почему то не работает и ссылка index.php?do=rab продолжает быть активной но ......

     

    Проблема сохраняется с отправкой данных методом GET в модуль.

    <form action="../rab/" formmethod="GET">
    <input type="text"  name="city" placeholder="Город" id="searchinput">
    
    <input type="text" name="vakansiya" placeholder="Вакансия" id="searchinput">
    
    <input type="submit" value="Поиск">
    </form>

    При нажатии на отправить получаться так /rab/?city=Сургут&vakansiya=стропальщик

    Должно быть так  /rab/Сургут/стропальщик/

     

    Помогите!!!! Который день бьюсь АП стену

  7. 4 часа назад, alex32 сказал:

    А это что за чудо-адрес? Это откель такие берутся? Если надо отправить на тот же модуль, откуда и отправляется. то в action можно вообще ничего не писать. или так и написать

    
    action="/index.php?do=rab"

     

    Да это забыл удалить action="/index.php?do=rab" не работает перекидывает на index.php?к=7&h=9

  8. Подскажите как передать данные методом GET уже второй день не могу понять в чём дело

    Страничка с модулем /index.php?do=rab

    сама форма

    <form action="../index.php?do=rab&" method="GET">

    <input type="text" name="zp" placeholder="Зарплата" id="searchinput">
    <input type="text" name="vakansiya" placeholder="Вакансия" id="searchinput">

    <input type="submit"  class="btn bg-teal btn-sm btn-raised position-left legitRipple" value="Поиск">
    </form>

    /index.php?zp=1111111&vakansiya=тест

    отправляет всё не на страничку с модулем а просто на index как это исправить?

  9. Всё с этим вроде разобрался ))))) Ещё такой вопрос у меня страничка http://test1.ru/index.php?do=rab сейчас работает так как нужно но после работы модуля загружается контент с новостями DLE добро пожаловать и тд. Если я удаляю из main.tpl  {content} то он перестаёт на других страничках грузиться, Как сделать так что бы на мой страничке {content} не загружался, а на других работал?

  10. 3 часа назад, alex32 сказал:

    Даже удивительно, что человек, пишущий модуль, совсем не может пользоваться поисковиками

    https://pafnuty.name/statyi/144-make-a-module.html

    Нечто подобное я читал для проверки написал вот такую конструкцию шаблон в main.tpl подключил так {include file="1.tpl"}

    //поясню как я понял логику
    $tpl->load_template( '1.tpl' ); //подключаем шаблон
    $text = 'Проверка шаблона'; //передаём даныне в переменную
    $tpl->set('{test}', $text); //передаём даныне в шаблон
    $tpl->compile('content'); //чё делает это не понял
    $tpl->result['content']; //вот этот элемент массива получилось вывести на печать в php
    $tpl->clear();//чё делает это не понял догадываюсь что закрывает подключение к шаблону
    //Но ни чего не получаеться в 1.tpl выводит пустой {test}
    //Сразу покажу как я пытался это в прикрутить
    $tpl->load_template( '1.tpl' );
    while ($row = $db->get_row($sql)) {
           $tpl->set('{test}', $row['salary']);
    	   
        }
    $tpl->clear();
    //Но ни чего не получаеться в 1.tpl выводит пустой {test}

     

  11. В 10.06.2020 в 19:14, Gameer сказал:
    
    if (!empty($_POST['action'])) {
        $sql = $db->query( "SELECT * FROM " . PREFIX . "_mod_job WHERE address LIKE '%" . $db->safesql($_POST['action']) . "%'");
        while ($row = $db->get_row($sql)) {
            print_r($row);
        }
    }

     

    Подскажите, я вот получил результаты запроса! Теперь хочу оформить это. Сделать шаблон что бы каждая выводимая строчка имела какой то дизайн. Не хочу это делать в коде. Можно ли как то в цикле вызвать шаблон и отдать в него результат запроса для вывода пользователю что бы результат был как на поисковике типа яндекс или гугл ?

  12. 3 часа назад, proba сказал:

    Вы условия форума не прочитали, а сможете ли прочитать ответ?

     

    Помощь и обучение - разные вещи! Путать не надо. Вам написали, что для закрытого кода, не зная его, это что пальцем в небо, ну или куда-то ещё, но вы ведь проггер и код пишете сами, так что вас не устраивает? Какой вам помощи не оказали?

    Щас вообще ни чё не понял. Конкретно в этой ветке мне вообще помощь ни какая не требуется! 

  13. 43 минуты назад, Baxtiyorq сказал:

    Куда нужно добавить этот скрипт require_once 'путь к файлу/ap.php'; 
    Что бы работали все страницы.   
    Мне скинули эти инструкции, но я ничего не понял:


    Файлы нужно поместить вместе со скриптами сайта (лучше в отдельный каталог). В стартовом php скрипте сайта подключить командой 
    require_once 'путь к файлу/ap.php';
    и первой командой вызвать функцию init_adv([string $ip])

     

     

     

    Подключение скрипта:
    **require_once 'ap.php';**

    Использование:
    в начале скрипта вызвать функцию **init_adv([string $ip])**

     * @param string $ip IPv4 or IPv6 адрес (если адрес не указан, то получает его из заголовка)
     * @return boolean true - пользователь переадресован на https версию
     
    Файл **config.php** должен быть расположен в одном каталоге с ap.php.

    В конфигурации могут быть настроены следующие поля:

    **ip_header** - название заголовка в котором передается ip пользователя

    **domain** - домен на который происходит редирект. Если не указан, то редирект происходит на тот же домен, откуда пришел пользователь.

    **ap_folder** - путь, по которому хранятся точки доступа. Если не указан, то сохраняются в каталог скрипта

    **server** - URL для запроса точек доступа

    Если ты подключаешь модуль то в main.tpl то он подключаеться так {include file="engine/modules/mymod.php"} в твоем случае возможно {include file="путь к файлу/ap.php'}

  14. 7 минут назад, Gameer сказал:
    
    if (!empty($_POST['action'])) {
        $sql = $db->query( "SELECT * FROM " . PREFIX . "_mod_job WHERE address LIKE '%" . $db->safesql($_POST['action']) . "%'");
        while ($row = $db->get_row($sql)) {
            print_r($row);
        }
    }

    В первую очередь вам нужно прочесть о 

    1. PHP.

    2. Базы данных.

    3. Безопасности данных.

    И лишь тогда пытаться что-то писать.

    Поясни пожалуйста функцию safesql что она делает? И дальнейшую логику ! Почему например я могу получать весь результат только в цикле?

  15. 31 минуту назад, alex32 сказал:

    Это же логично, раз что-то работает не так, значит где-то  написано не так. А как написано, нам отсюда не видно

    if (!empty($_POST['action'])) {
    	$db->query( "SELECT * FROM " . PREFIX . "_mod_job WHERE address LIKE '%".$_POST['action']."%'");
    	$row = $db->get_row();
    	print_r($row);
       
       
    }

    Ни чё такого 

    Я подумал может тут реализована схема как PDO типа fetch и fetch_all попробовал get_row_all но такой нет и упала ошибка

×
×
  • Создать...