Jump to content

campusboy

VIP
  • Content Count

    915
  • Joined

  • Last visited

  • Days Won

    23

Posts posted by campusboy

  1. @valentino, с какой целью уточнили? Если в запросе не описан типа устройства, то правило будет применяться ко всем типам устройств. Зачем включать эти правила только для экранов компьютеров, планшетов, смартфонов? Пусть применяется ко всем устройствам  :)  да и кода писать меньше, во всяком случае ситуация это позволяет.

  2. Приветствую. Есть различные варианты решений, все они связаны с определением HTTP_USER_AGENT, по другому на уровне сервера не сделать. Вот варианты:

    1) Использовать функцию get_browser, которая по умолчанию не входит в дистрибутив php;

    2) На основе ветки обсуждений по функции выше, рекомендуют использовать скрипт UserAgentParser.

    3) Также в комментариях к той функции человек написал свою функцию парсинга HTTP_USER_AGENT, усовершенствованный аналог get_browser по его словам, продублирую её код сюда:

    <?php
    function getBrowser() 
    { 
        $u_agent = $_SERVER['HTTP_USER_AGENT']; 
        $bname = 'Unknown';
        $platform = 'Unknown';
        $version= "";
    
        //First get the platform?
        if (preg_match('/linux/i', $u_agent)) {
            $platform = 'linux';
        }
        elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
            $platform = 'mac';
        }
        elseif (preg_match('/windows|win32/i', $u_agent)) {
            $platform = 'windows';
        }
        
        // Next get the name of the useragent yes seperately and for good reason
        if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
        { 
            $bname = 'Internet Explorer'; 
            $ub = "MSIE"; 
        } 
        elseif(preg_match('/Firefox/i',$u_agent)) 
        { 
            $bname = 'Mozilla Firefox'; 
            $ub = "Firefox"; 
        } 
        elseif(preg_match('/Chrome/i',$u_agent)) 
        { 
            $bname = 'Google Chrome'; 
            $ub = "Chrome"; 
        } 
        elseif(preg_match('/Safari/i',$u_agent)) 
        { 
            $bname = 'Apple Safari'; 
            $ub = "Safari"; 
        } 
        elseif(preg_match('/Opera/i',$u_agent)) 
        { 
            $bname = 'Opera'; 
            $ub = "Opera"; 
        } 
        elseif(preg_match('/Netscape/i',$u_agent)) 
        { 
            $bname = 'Netscape'; 
            $ub = "Netscape"; 
        } 
        
        // finally get the correct version number
        $known = array('Version', $ub, 'other');
        $pattern = '#(?<browser>' . join('|', $known) .
        ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
        if (!preg_match_all($pattern, $u_agent, $matches)) {
            // we have no matching number just continue
        }
        
        // see how many we have
        $i = count($matches['browser']);
        if ($i != 1) {
            //we will have two since we are not using 'other' argument yet
            //see if version is before or after the name
            if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
                $version= $matches['version'][0];
            }
            else {
                $version= $matches['version'][1];
            }
        }
        else {
            $version= $matches['version'][0];
        }
        
        // check if we have a number
        if ($version==null || $version=="") {$version="?";}
        
        return array(
            'userAgent' => $u_agent,
            'name'      => $bname,
            'version'   => $version,
            'platform'  => $platform,
            'pattern'    => $pattern
        );
    } 
    
    // now try it
    $ua=getBrowser();
    $yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent'];
    print_r($yourbrowser);
    ?>
    up
    down
    7 Francesco R ¶2 months ago
    If you ONLY need a very fast and simple function to detect the browser name (update to May 2016):
    
    <?php
    
    function get_browser_name($user_agent)
    {
        if (strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR/')) return 'Opera';
        elseif (strpos($user_agent, 'Edge')) return 'Edge';
        elseif (strpos($user_agent, 'Chrome')) return 'Chrome';
        elseif (strpos($user_agent, 'Safari')) return 'Safari';
        elseif (strpos($user_agent, 'Firefox')) return 'Firefox';
        elseif (strpos($user_agent, 'MSIE') || strpos($user_agent, 'Trident/7')) return 'Internet Explorer';
        
        return 'Other';
    }
    
    // Usage:
    
    echo get_browser_name($_SERVER['HTTP_USER_AGENT']);
    
    ?>
    

    Определив HTTP_USER_AGENT, остальное уже дело техники, как говорится.

  3. Авто бывает всплывает, когда ищешь что-нибудь не про авто. Сколько раз было, ищу что-нибудь по программированию, выдаёт первым результатом AUTO.RU с почти такой же фразой, что я ищу. К примеру "Как избежать утечки памяти в скриптах PHP". Когда перехожу, естественно там этой инфы нет. И в коде страницы тоже ничего и близко нет. Вопрос, какого лешего? И у всех сайтах есть кнопочка "пожаловаться на релевантный результат", но у AUTO.RU такой кнопочки нет :-) Увы и ах.

  4. Мне в своё время очень сильно дали толчок уроки от учебного центра "СПЕЦИАЛИСТ" при МГТУ им. Н.Э. Баумана, книги не заходили вообще, про ютуб вообще молчу. А лектор оказался таким "заразным", что теперь не могу остановится  :)

  5. Это не проблема, так работает База данных и это правильно. ID в таблице dle_post это ключ, автоинкремент. При добавлении новости её ID становится на 1 больше. Не важно, что вы удалили предыдущие статьи, База помнит, что были такие ID во избежании проблем, так как может ID использоваться для взаимосвязанных выборок, то есть этот ID может использоваться в других таблицах, к примеру в таблице dle_tags, dle_post_extras и т.д. Иначе Вы удалили запись, а данные в других таблицах, привязанных к этому ID остались (база же не может знать, что движок их удаляет, она "защищает" себя), Вы заливаете новую статью с тем же ID и бац - у ней метки от старой статьи почему-то и другие "грязные данные" приклеились. Зачем Вам это?

     

    Если "обнулять" ID, то со знанием дела, которого у Вас, судя по всему нет. Но обнуление делается так: открывается страница управления БД, к примеру phpmyadmin, выбирается нужная таблица, в нашем случае dle_post, щёлкаем по вкладке "Операции", находим блок "Параметры таблицы", в нем выставляем нужный инкремент, который должен быть следующим.

     

    dc9f843bad6b4c53a56a226269d42053.png

  6. А нельзя ли зарегать нового пользователя, а затем в базе данных сменить ему права на админа? Зайти в админку потом и делать дела. Первое что в голову пришло.

     

    А хеш не походит, потому что наверное в хешировании пароля не только соль участвует, но и какие-то введенные данные (почта или логин).

  7. Не подскажите, офф репозитории? Данный шаблон я скачал на одном сайте, на который повел меня Яндекс. :(

    Я бы порекомендовал в админке в разделе "Темы" выбирать, так как там такой же фильтр по темам, что и в репозитории, но есть преимущество - "примерить" тему на свой сайт без её установки. Если понравилась, жмём "Установить" и дело с концом.

  8. Ответ @vituson неплох! И совет обновить форум тож хорош. Смысл его удалять? Он Вам мешает или кушать просить?

     

    Почистить форум, самому насоздавать тем актуальных по тематике сайта, которые планируете написать, но это всё в далеком будущем, где в Названии ключевики, а описание самоотсебятное, для галочки хотя бы. Затем на WP сделать виджет, который будет подгружать темы с форума. Это могут быть последние темы со всего форума или последние темы с определенной его ветки в соответствии с рубрикой (темой) статьи, где отображается виджет. Так же можно при создании статьи и темы на форуме использовать одинаковые метки (теги), чтобы вообще чётко идентифицировать связь.

     

    Оформить виджет с призывом к действие (создавай тему, дай совет и т.д.). Если какая-то тема встреливает, значит можно писать полноценную статью, потом в теме форуме прикрепить ссылочку на неё или вообще удалить и сделать перенаправление. Это уже сеошникам решать, как лучше сделать.

  9. Заказывал у @Vyacheslavа постинг в 22 твиттер-аккаунта + 1 комплекс для разогрева. Сделано всё было в течение 20 минут, причём мы работали на индивидуальных условиях, которые усложнили его работу. Большое спасибо за оперативность и деловой подход.

  10. В joomla встроено Jquery, какая ошибка в консоли?

     

    Может потому что используется $? Не знаю, как в Джумла, но в WP по умолчанию у скриптов не определяется с целью совместимости с другими библиоткеми, потому для WP я начинаю так:

    jQuery(document).ready(function($){
    

    В Джумле так или обычно?

  11. Оскорбить вас не хотел, там ошибка не ваша, имелось ввиду про формулу, я напомнил перед этим постом, а потом и после этого(ваш).

     

    Потом могли написать что у вас не правильно считает!!! :D А им уже воспользовалось тысяча людей.

     

    Потому выкладываю код, как я вижу этот калькулятор, по просьбе ТС (в личку написал техзадание, так сказать).

     

    Сразу замечу, что в прилагаемом источнике ( ifeelstrong.ru/anatomy/body/indeks-massy-tela.html ) даются данные ИМТ относительно возраста в одной таблице и в ней учтены промежуток ОТ и ДО как по ИМТ, так и по возрасту, а относительно пола промежутки только по возрасту и только точное значение ИМТ. ТС попросил именно по второму варианту, но я считаю его не совсем корректным, так как обладателей точного значение ИМТ будет мало, в большинстве случаев человек будет получать результат "дефицит массы" или "избыток".

     

    Так как я привык всё писать отдельно (html. css. js), то и код для разного типа данных в разных файлах.

     

    HTML (файл index.html)

    <!doctype html>
    <html lang="ru">
      <head>
        <meta charset="UTF-8">
        <title>Индекс массы тела для мужчин и женщин</title>
        <link rel="stylesheet" href="style.css" type="text/css" media="all" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="script.js"></script>
      </head>
      <body>
    
        <h1>Калькулятор расчёта индекса массы тела для мужчин и женщин</h1>
        
        <div class="calculator_imt">
          <h2>Введите ваши параметры для расчета индекса массы тела</h2>
          
          <form>
    
            <!-- Выбор пола -->
            <div class="gender calc-block">
              <div class="left-side">Пол:</div>
              <div class="right-side">
                 <input type="radio" name="sex" value="M" id="sexMale" checked="checked"/> 
                 <label for="sexMale">Мужской</label>
                 <input type="radio" name="sex" value="F" id="sexFem" />
                 <label for="sexFem">Женский</label>
              </div>
            </div>
    
            <!-- Выбор возраста -->
            <div class="age calc-block">
              <div class="left-side"><label for="select-age">Возраст:</label></div>
              <div class="right-side">
                <select name="select-age" id="select-age">
                  <option data-f="19.5" data-m="21.4" value="">19-24 года</option>
                  <option data-f="23.2" data-m="21.6" value="">25-34 года</option>
                  <option data-f="23.4" data-m="22.9" value="">35-44 года</option>
                  <option data-f="25.2" data-m="25.8" value="">45-54 года</option>
                  <option data-f="27.3" data-m="26.6" value="">после 55 лет</option>
                </select>
              </div>
            </div>
            
            <!-- Ввод веса -->
            <div class="weight calc-block">
              <div class="left-side">
                <label for="weight-in">Вес:</label>
              </div>
              <div class="right-side">
                <input type="number" name="weight" id="weight-in" placeholder="в килограммах" required />
              </div>
            </div>
    
            <!-- Ввод роста -->
            <div class="height calc-block">
              <div class="left-side">
                <label for="height-in">Рост:</label>
              </div>
              <div class="right-side">
                <input type="number" name="height" id="height-in" placeholder="в сантиметрах" required=/>
              </div>
            </div>
            
            <div class="calc-btn calc-block">
              <input type="submit" value="Рассчитать индекс массы тела" />
            </div>
            
          </form>
          
          <!-- Вывод результата -->
          <div class="calc-result"></div>
         
        </div>
       
      </body>
    </html>
    

    Javascript (файл script.js)

    $(document).ready(function(){
     
      // Берем весь блок в переменную для последующей более быстрой работой с ним
      var calcBlock = $('.calculator_imt');
      
      // Следим за формой и начинаем обрабатывать результат только по событию submit (нажатие кнопки или нажатие Enter в поле)
      $('form', calcBlock).submit(function(event){
        
        // Отменяем действия формы по умолчанию (не перезагружаем страницу при подсчёте)
        event.preventDefault();
    
        ////// ПОЛУЧАЕМ ДАННЫЕ, с которыми потом будем работать
        
        // Значение ПОЛа
        var calcGender = $('[name = sex]:checked', calcBlock).val();
        // Значение ВОЗРАСТа
        var calcAge = $('[name = select-age]', calcBlock);
        // Значение ИМТ для ЖЕНЩИНЫ выбранного возраста
        var imtF = $(':selected', calcAge).data('f');
        // Значение ИМТ для МУЖЧИНЫ выбранного возраста
        var imtM = $(':selected', calcAge).data('m');
        // Значение ВЕСа
        var calcWeight = $('[name = weight]', calcBlock).val();
        // Значение РОСТа
        var calcHeight = $('[name = height]', calcBlock).val();
        
        ////// РАССЧИТЫВАЕМ имт ( m/h*h, где m - масса тела человека в килограммах, а h - рост человека в метрах )
        // Считываем оптимальный имп относительно возраста и пола
        var itmOptimal = ( calcGender == 'F' ) ? imtF : imtM;
        // Сама формула расчёта
        var myIMT = +( calcWeight / ( ( calcHeight * calcHeight / 10000 ) ) ).toFixed(1);
        // Начальная фраза при выводе результата на экран (далее в зависимости от результата сравнения она будет дополнена)
        var message = 'При Вашем росте ' + calcHeight + ' см и весом ' + calcWeight + ' кг ИМД равен ' + myIMT + ', а это значит, что у Вас ';
        
        ////// СРАВНИВАЕМ полученный имт человека с введенными им параметрами и оптимальными для него
        if ( myIMT < itmOptimal ) message += 'наблюдается дефицит массы. Рекомендуется ИМД равный ' + itmOptimal + '. Обычно дефицит массы связан с хроническими заболеваниями, нарушениями питания, нервными недомоганиями, а так же анорексией.';
        else if ( myIMT == itmOptimal ) message += 'нормальная масса. Рекомендуется ИМД равный ' + itmOptimal + '. Нормальная масса тела характеризует здоровый вес, необходимый для полноценной жизнедеятельности организма.';
        else if ( myIMT > itmOptimal ) message += 'избыток масса тела. Рекомендуется ИМД равный ' + itmOptimal + '. Избыточная масса тела увеличивает риск возникновения сердечнососудистых заболеваний и увеличивает нагрузку на все органы. При таком показателе ИМТ желательно придерживаться диеты и получать аэробные нагрузки, чтобы довести ИМТ до нормальных значений.';
        else message = 'Мы не смогли рассчитать для Вас ИМТ.';
        
        ////// ВЫВОДИМ на экран результат вычислений и общий вывод
        $('.calc-result').text( message );
        
      });
      
    });
    

    CSS (файл style.css)

    .calculator_imt h2 {
     text-align: center;
    }
    
    .calculator_imt form {
     width: 500px;
     margin: 0 auto;
    }
    
    .left-side, .right-side {
     display: inline-block;
     vertical-align: top;
    }
    
    .left-side {
     width: 185px;
     padding: 5px 10px 5px 0;
     text-align: right;
    }
    
    .right-side {
     width: 300px;
    }
    
    .calculator_imt input {
     padding: 2px 5px;
    }
    
    .calc-btn.calc-block {
      text-align: center;
    }
    

    Прошу заметить, что я использую библиотеку jQuery, так как она следит за относительной кроссбраузерностью. Вторая причина - я плоховато знаю ванильный js.

  12. Вам просто нужно отменить действие по умолчанию у формы, то есть отправку данных. Вот подредактировано:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <style>
          .error input{
          border: 1px solid red;
          }
          .error {
          color: red;
          }
        </style>
      </head>
      <body>
        <span >
        Ваш индекс массы тела (ИМТ) равен:
        </span>
        <div id="Summ"></div>
        <div class="block_content">
          <form>
            <table align="center" class="content_fields">
              <tr>
                <td align="center" colspan="2" style="padding-bottom: 10px;">
                  <h2>Введите ваши параметры для расчета индекса массы тела</h2>
                </td>
              </tr>
              <tr>
                <td align="right" width="50%" style="padding-right: 5px; padding-top: 5px;">
                  Пол:
                </td>
                <td align="left" width="50%" style="padding-left: 5px; padding-bottom: 5px;">
                  <input type="radio" name="sex" value="M" checked="checked"/> 
                  <label for="sexMale"><span></span> Мужской</label>
                  <input type="radio" name="sex" value="F" id="sexFem" class="rad" /> 
                  <label for="sexFem"><span></span> Женский</label>
                </td>
              </tr>
              <tr>
                <td align="right" width="50%" style="padding-right: 5px; padding-top: 5px;">
                  возраст
                </td>
                <td>
                  <div class="select_block" style="width: 118px;">
                    <select name="height_eng" id="height_eng">
                      <option value="4.0">19-24 года</option>
                      <option value="4.1">25-34 года</option>
                      <option value="4.2">35-44 года</option>
                      <option value="4.3">45-54 года</option>
                      <option value="4.4">после 55 лет</option>
                    </select>
                  </div>
                </td>
              </tr>
              <tr>
                <td align="right" width="50%" style="padding-right: 5px;">
                  Вес:
                </td>
                <td align="left" width="50%" style="padding-left: 5px;">
                  <input type="text" name="weight" style="width: 120px;" maxlength="3" id="weight" />
                </td>
              </tr>
              <tr>
                <td align="right" width="50%" style="padding-right: 5px;">
                  Рост:
                </td>
                <td align="left" width="50%" style="padding-left: 5px;">
                  <div style="float: left;">
                    <input type="text" name="height" style="width: 120px;" maxlength="4" id="height"  >
                    </input>
                  </div>
                </td>
              </tr>
              <tr>
                <td align="center"  colspan="2" style="padding-top: 10px;">  
                  <input type="submit"  onClick="validate(this.form, event)" value="Рассчитать индекс массы тела" />
                </td>
              </tr>
            </table>
          </form>
        </div>
        <script>
          function showError(container, errorMessage) {
            container.className = 'error';
            var msgElem = document.createElement('span');
            msgElem.className = "error-message";
            msgElem.innerHTML = errorMessage;
            container.appendChild(msgElem);
          }
          
          function resetError(container) {
            container.className = '';
            if (container.lastChild.className == "error-message") {
              container.removeChild(container.lastChild);
            }
          }
          
          function validate(form, event) {
            event.preventDefault();
            var elems = form.elements;
            var k=0;
            resetError(elems.weight.parentNode);
            if (!elems.weight.value) { k=1;
              showError(elems.weight.parentNode, ' введите вес');
            }
          
            resetError(elems.height.parentNode);
            if (!elems.height.value) {k=1;
              showError(elems.height.parentNode, ' введите рост');
            }
            if (k==0){
              index_mas=parseFloat(elems.weight.value)/(parseFloat(elems.weight.value)*parseFloat(elems.weight.value));
              var SummDok = document.getElementById('Summ');
              SummDok.innerHTML = index_mas;
             }
          }
        </script>
      </body>
    </html>
    
  13. Так делать не совсем правильно, но технически это не сложно и совсем нет  гарантий что-это не делается на стороне аналитики.

    Тот же Яндекс Вебвизор ведет полное логирование всех действий пользователя на странице. Даже не то, что юзер написал на странице и отправил через форму комментирования, а ВСЕ его нажатые клавиши!!!

    Ничего не мешает во время этих действий отключать Метрику или же публиковать комментарии с админки.

  14. Первый такой ком у меня был еще 15.04.2015 года. Тогда комментариев мало было, я тоже заменила на свой текст. Но последующие удаляла, т.к бытует мнение, что Яша считает множественные комы с одного ip накруткой, особенно на молодых сайтов, где мало комов.

    Расскажите нам, хотя бы выдвиньте предположение, как Яндекс или кто-либо другой, кроме админа, может узнать с какого IP оставлен комментарий.

×
×
  • Create New...