Jump to content

Heliax

Members
  • Content Count

    19
  • Joined

  • Last visited

Posts posted by Heliax


  1. Приветствую. Что-то я логики этого кода не понимаю...

    1. У вас select генерируется скриптом, при этом опция с белым цветом встаёт в фокус. Т.е. заведомо известно, что в селекте выбран именно белый цвет. Так зачем тогда таким мудрёным способом пытаться получить этот самый цвет?

    2. Обычно для получения значения достаточно конструкции вида: myColor = $('select#color').val();

    3. Зачем вы смешиваете JQuery c JS, если JQuery даёт весь необходимый инструментарий: наличие выражения document.getElementById("color").value немного сбивает с толку.


  2. Классика жанра: сайт полностью сливают на локальную машину под LAMP (вместе с БД), затем, всё что нужно правят (тестируют и ещё правят). Когда нужный результат достигнут, заливают всё обратно на сервер. Выгоды: быстрый апгрейд сайта без лишних головняков. Думаю, что у вас такой вариант по какой-то причине не прокатывает. Если так, то печаль. Править глобально сайт прямо на боевом сервере - это ответственное и рискованное предприятие.


  3. Я бы предпочёл вариант с использованием SWITCH, т.к. он более логичен, причём сделал бы чуть иначе:

    switch (strip_tags(trim($_POST['form-id']))){
      case 1:
        # Здесь выполнение любого кода и вывод результатов.
      break;
    }
    

    Функции предназначены для выноса того участка кода, который неоднократно выполняется (и здесь не имеется в виду многократное выполнение всего php-скрипта).

     

    А вообще.. лучший вариант в плане производительности определяется экспериментальным путём: нужно получить среднеарифметические значения затраченного времени на выполнение разных версий скрипта. Полученные результаты, разумеется, сравнить между собой и выяснить.. какая версия шустрее.


  4. Если желаете чтобы в коде страницы небыло лишних ссылок, но посетители их видели (линки на партнёрки), то сделайте псевдо-ссылки посредством CSS и JavaScript.

     

    Вот простой пример (но можно куда хитрее замутить):

     

    CSS:

    .psevdoLink { color: #0000a0; text-decoration: underline; }
    .psevdoLink:hover { color: #0000ff; text-decoration: underline; cursor: pointer; }
    

    JS (с применением jQuery):

    jQuery(document).ready(function(){
      //...код...
      // Обработчик псевдо-ссылок.
      jQuery('span.psevdoLink').bind('click', function(){
        var myLinkID = jQuery(this).attr('id'), partnerLink = '';
        switch(myLinkID){
          case 'myLink1': partnerLink = 'my-partner1.ru'; break;
          case 'myLink2': partnerLink = 'my-partner2.com'; break;
        }
        if(partnerLink){
          partnerLink = 'http://'+partnerLink;
          window.open(partnerLink, '_self');
        }
      });
      //...код...
    });
    

    HTML:

    Съешь ещё этих <span class="psevdoLink" id="myLink1">мягких французских булок</span>, да выпей <span class="psevdoLink" id="myLink2">чаю</span>.

  5. Чтобы избежать запуска нескольких копий таймера одновременно, нужно удалить кнопку Старт вместе с её обработчиком (её я воткнул для примера). Кнопку Рестарт переименовать в Старт/Рестарт (её обработчик как раз именно так и работает).


  6. Вот.. набросал на скору руку. Дальше сам. Надеюсь, принцип работы будет понятен.
     

    
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Отслеживание бафов</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <style type="text/css">
    .myControlSection {margin-bottom: 7px;}
    .myControlSection button {width: 100px; height: 40px; font-weight: 700; cursor: pointer;}
    .myControlSection .newBuffAppendButton {width: 260px; margin-left: 14px;}
    .buffUnit {width: 48px; height: 48px; border: 1px solid #000; border-radius: 3px;}
    .buffUnit span {margin-left: 3px;}
    .buffClass1 {background: #ffffcc;}
    .buffClass2 {background: #ffff33;}
    .buffClass3 {background: #ffcccc;}
    .buffClass4 {background: #ccff66;}
    .buffClass5 {background: #ffcc66;}
    .buffClass6 {background: #99ccff;}
    .buffClass7 {background: #ffcc00;}
    .buffClass20 {background: #99ffff;}
    </style>
    <script type="text/javascript">
    var myBuffTimer, // Собственно, наш таймер.
    buffTimingArr = {}; // «Реестр» - для хранения инфы о бафах, организуем на базе объектов.
    // Если на сайте есть другие фреймворки кроме jQuery и они между собой конфликтуют, то замени все символы $ на jQuery
    // Наличие ошибок в JS хорошо показывает IE :-) Для отладки скриптов будет очень полезно.
    $(document).ready(function(){
    // Управление.
    $('button#myStartButton').unbind('click').bind('click', function(){
    myBuffInit(); // Инициализация.
    myTimerForCalculateBuffs(); // Стартуем таймер.
    });
    $('button#myStopButton').unbind('click').bind('click', function(){
    clearTimeout(myBuffTimer); // Останавливаем таймер.
    // Сбрасываем на странице значения в ноль.
    $('div.buffUnit').each(function(){ $(this).find('span').html('0'); });
    });
    $('button#myRestartButton').unbind('click').bind('click', function(){
    clearTimeout(myBuffTimer); // Останавливаем таймер.
    myBuffInit(); // Заново инициализируем.
    myTimerForCalculateBuffs(); // Стартуем таймер.
    });
    $('button.newBuffAppendButton').unbind('click').bind('click', function(){
    var currentBuffCount = $("div.buffUnit").length, // Сколько уже бафов есть на странице.
    newBuffID = 'buff'+currentBuffCount+1, // Выделяем ID для нового бафа.
    buffTimeValue = Math.floor(Math.random() * 100)+10, // Генерируем его продолжительность (от 10 до 100 сек).
    buffClass = 'buffClass'+(Math.floor(Math.random() * 7)+1); // Какого цвета будет новый баф (от 1 до 7).
    buffTimingArr[newBuffID] = buffTimeValue+'|0'; // Внесём новый баф в «реестр», и выкатим его на страницу.
    $('div#myBuffContainer').append('<div id="'+newBuffID+'" class="buffUnit '+buffClass+'"><span>'+buffTimeValue+'</span><input type="hidden" value="'+buffTimeValue+'" /></div>');
    //alert(buffTimeValue);
    });
    });
    
    // Инициализация: соберём инфу по каждому бафу в «реестр».
    function myBuffInit(){
    var buffID, buffTimeValue;
    $('div.buffUnit').each(function(){
    buffID = $(this).attr('id'); // ID бафа ...
    buffTimeValue = $(this).find('input').val(); // ... и его длительность.
    buffTimingArr[buffID] = buffTimeValue+'|0'; // Запоминаем инфу о бафе (0 - это служебка для таймера: сколько баф уже действует).
    $('div#'+buffID).show().find('span').html(buffTimeValue); // Отсветим его длительность на странице.
    });
    }
    
    // Зацикленый таймер для пересчёта валидности бафов.
    function myTimerForCalculateBuffs(){
    var buffID, buffTimerArr, buffMaxTime, buffCurrentTime;
    // Проверяем каждый баф в «реестре» - не закончился ли он.
    for(buffID in buffTimingArr){
    buffTimerArr = buffTimingArr[buffID].split('|'); // Текущая инфа о длительности бафа.
    buffMaxTime = parseInt(buffTimerArr[0]); // Сколько баф должен действовать.
    buffCurrentTime = parseInt(buffTimerArr[1]); // Сколько баф уже действует.
    buffCurrentTime++;
    if(buffCurrentTime == buffMaxTime){ // Если время истекло, то ...
    delete buffTimingArr[buffID]; // ... забываем про него ...
    $('div#'+buffID).hide(300); // ... и делаем какое-либо нужное нам действие.
    }else{ // Если время бафа не истекло, то ...
    buffTimingArr[buffID] = buffMaxTime+'|'+buffCurrentTime; // ... запомним сколько он уже действует, и ...
    $('div#'+buffID).find('span').html(buffMaxTime-buffCurrentTime); // ... отсветим на странице обратный отсчёт.
    }
    }
    // clearTimeout(myBuffTimer); // На случай, если таймер будет глючить.
    // Авто-перезапуск таймера через 1 сек.
    myBuffTimer = setTimeout(function(){ myTimerForCalculateBuffs(); }, 1000);
    }
    </script>
    </head>
    <body>
    <div class="myControlSection">
    <button id="myStartButton">Старт</button>
    <button id="myStopButton">Стоп</button>
    <button id="myRestartButton">Рестарт</button>
    <button class="newBuffAppendButton">Добавить новый баф</button>
    </div>
    <div id="myBuffContainer">
    <div id="buff1" class="buffUnit buffClass1"><span>0</span><input type="hidden" value="10" /></div>
    <div id="buff2" class="buffUnit buffClass2"><span>0</span><input type="hidden" value="90" /></div>
    <div id="buff3" class="buffUnit buffClass3"><span>0</span><input type="hidden" value="30" /></div>
    <div id="buff4" class="buffUnit buffClass4"><span>0</span><input type="hidden" value="25" /></div>
    <div id="buff5" class="buffUnit buffClass5"><span>0</span><input type="hidden" value="45" /></div>
    <div id="buff6" class="buffUnit buffClass6"><span>0</span><input type="hidden" value="150" /></div>
    <div id="buff7" class="buffUnit buffClass7"><span>0</span><input type="hidden" value="15" /></div>
    <!-- И так далее, можно добавлять динамически: как посредством PHP, так и с помощью JS -->
    <div id="buff20" class="buffUnit buffClass20"><span>0</span><input type="hidden" value="200" /></div>
    </div>
    </body>
    </html>

    bufftest.php


  7.  

    Или вот ещё вариант (то же, но чуть короче):

    
    
    $pic = "img/house.jpg"; if (trim($row['pic'])) $pic = $row['pic'];
    echo "<div id=\"newsbox\"><div id=\"adtitle\"><b>".$row['status2']." ".$row['vid']."</b></div><div id=\"img_in_newsbox\"><img src=\"".$pic."\">

     

    И да, маленький совет: старайтесь не заключать символьный вывод в двойные кавычки без явной на то необходимости - это замедляет работу PHP. Строчку с выводом лучше переписать вот так:

    echo '<div id="newsbox"><div id="adtitle"><b>'.$row['status2'].' '.$row['vid'].'</b></div><div id="img_in_newsbox"><img src="'.$pic.'">';

    Раз уж вы только изучаете PHP, то привыкайте писать код грамотно. ;-)


  8. слеш надо было добавить 

     

    jQuery('div#banner').load("/banner.html");

     

    вот так не тормозит

    Это я вам пример привёл. :)  Между кавычками вы вольны прописать что угодно - любой путь до файла с вашим баннером. И лучше указывать абсолютный путь, например:

    jQuery('div#banner').load("http://my-site.ru/media/banners/banner1.html");

    Т.к. контент в блоке "#banner" выводится скриптом, то на базе этого можно замутить и задержку перед выводом, и вывод баннера случайным образом (если баннеров несколько), и анимированный вывод баннера, и вывод нужного варианта баннера в зависимости от открытой страницы,  и т.д. и т.п.


  9. Вариант на базе JQuery (проверено). Надеюсь, логика работы будет понятна, и вы без труда сможете внедрить сие решение к себе в код. Если с программированием у вас не очень, то придётся обращаться к программерам.

    
    
    
    
    <div class="myDescriptionValue">
      По рзелульаттам <strong>илссеовадний одонго анлигйсого унвиертисета</strong>, не иеемт занчнеия, в кокам пряокде рсапожолена бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиатем кдаужю бкуву по отдльенотси, а все солво цликеом.
    </div>
    <div class="myDescriptionValue">
      По рзелульаттам илссеовадний <font color="#0000ff">одонго анлигйсого унвиертисета</font>, не иеемт занчнеия, в кокам пряокде рсапожолена бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете.
    </div>
    <div class="myDescriptionValue">2 блок ...</div>
    <div class="myDescriptionValue">3 блок ...</div>
    <div class="myDescriptionValue">4 блок и т.д.</div>
    
    
    
    
    
    <script>
    // Логика работы. Если длина текста в каком-либо блоке с классом «myDescriptionValue» превышает заданное значение, то подрезаем такой текст и добавляем в конец многоточие. При этом из подрезаемого текста будут удалены все HTML-теги (если таковы в нём присутствовали).
    jQuery(document).ready(function(){
      var stringLimit = 520, myDescriptionObj, myDescriptionValue;
      jQuery('div.myDescriptionValue').each(function(){ // Перебираем все имеющиеся блоки с нужным классом.
        myDescriptionObj = jQuery(this); myDescriptionValue = myDescriptionObj.text();
        if(myDescriptionValue.length > stringLimit){ // Проверяем длину текста в блоке.
          myDescriptionValue = myDescriptionValue.substr(0, stringLimit)+'…'; // Подрезаем текст и добавляем многоточие.
          myDescriptionObj.html(myDescriptionValue); // Возвращаем подрезанный текст обратно.
        };
      });
    });
    </script>
    

    Такие вещи лучше выполнять на стороне сервера, к примеру, на PHP  будет более грамотно.


  10. Подключи JQuery и напиши нужный обработчик. Смотреть тут.

    Чтобы вытащить число из значения можно, к примеру, использовать parseInt (тыц). Вариантов реализации много - от простенького до сложного (с проверками на валидность).


  11. Если очень хочется, то в корневой .htaccess нужно добавить следующий код (только site.ru заменить не забудьте):

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^site.ru
    RewriteRule (.*) http://www.site.ru/$1'>http://www.site.ru/$1 [R=301,L]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
    RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ /$1/ [R=301,L]
    

    Подстановка www в адрес будет происходить автоматом. Учтите, это актуально только для сервера Apache.

×
×
  • Create New...