Задать вопрос
  • Подсветка кода в стандартном редакторе WP

    nixmale
    @nixmale
    Есть одна довольно любопытная вещица, но как ее прикрутить к админке сайта я не представляю. Быть может вам пригодится.
    data:text/html;base64,PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt9PC9zdHlsZT48ZGl2IGNsYXNzPSJlIiBpZD0iZWRpdG9yIj48L2Rpdj48c2NyaXB0IHNyYz0iaHR0cDovL2QxbjB4M3FqaTgyejUzLmNsb3VkZnJvbnQubmV0L3NyYy1taW4tbm9jb25mbGljdC9hY2UuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPjwvc2NyaXB0PjxzY3JpcHQ+dmFyIGU9YWNlLmVkaXQoImVkaXRvciIpO2Uuc2V0VGhlbWUoImFjZS90aGVtZS9tb25va2FpIik7ZS5nZXRTZXNzaW9uKCkuc2V0TW9kZSgiYWNlL21vZGUvcGhwIik7PC9zY3JpcHQ+
    
    Ответ написан
    1 комментарий
  • Как пропиарить небольшой сервис не имея больших денег на это?

    nixmale
    @nixmale
    Так ведь SEO это основа. Без нее никуда. Добавь уникальных статей на сайт, наставь ссылок. К концу октября сайт уже может видеть в топ-10 Яндекса твоя целевая аудитория. И не сколько денег потратить нужно, сколько хорошенько поработать над самим сайтом.
    Ответ написан
    7 комментариев
  • Javascript: body onLoad

    nixmale
    @nixmale
    <script>
    var src = 'icon/Abstract XP.jpg';
    function test(url)
    {
    document.getElementById('test').innerHTML = '<img src="'+src+'" width="" height="" alt="" border="0">';
    }

    </script>
    <body onload="alert('body onloaded');test(src);">
    <div id="test"></div>
    </body>
    Ответ написан
  • Можно ли сделать полностью AJAX приложение на Rails

    nixmale
    @nixmale
    Полностью AJAX основанное приложение можно сделать на многих языках.
    Ответ написан
  • Динамическое добавление полей в форме?

    nixmale
    @nixmale
    <div id="parentId">
      <div>
        <nobr><input name="name[1]" type="text" style="width:300px;" />
        <select size="1" name="type[1]" style="width:150px;">
          <option value="text">Текстовое поле</option>
          <option value="int">Целое число</option>
          <option value="float">Число-цена</option>
        </select>
        <a style="color:red;" onclick="return deleteField(this)" href="#">[—]</a>
        <input name="url[1]" type="text" style="width:300px;" />
        <a style="color:green;" onclick="return addField()" href="#">[+]</a></nobr>
      </div>
    </div>
    
    <script>
    var countOfFields = 1; // Текущее число полей
    var curFieldNameId = 1; // Уникальное значение для атрибута name
    var maxFieldLimit = 25; // Максимальное число возможных полей
    function deleteField(a) {
      if (countOfFields > 1)
      {
     // Получаем доступ к ДИВу, содержащему поле
     var contDiv = a.parentNode;
     // Удаляем этот ДИВ из DOM-дерева
     contDiv.parentNode.removeChild(contDiv);
     // Уменьшаем значение текущего числа полей
     countOfFields--;
     }
     // Возвращаем false, чтобы не было перехода по сслыке
     return false;
    }
    function addField() {
     // Проверяем, не достигло ли число полей максимума
     if (countOfFields >= maxFieldLimit) {
     alert("Число полей достигло своего максимума = " + maxFieldLimit);
     return false;
     }
     // Увеличиваем текущее значение числа полей
     countOfFields++;
     // Увеличиваем ID
     curFieldNameId++;
     // Создаем элемент ДИВ
     var div = document.createElement("div");
     // Добавляем HTML-контент с пом. свойства innerHTML
     div.innerHTML = "<nobr><input name=\"name[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" /> <select size=\"1\" name=\"type[" + curFieldNameId + "]\" style=\"width:150px;\"><option value=\"text\">Текстовое поле</option><option value=\"int\">Целое число</option><option value=\"float\">Число-цена</option></select> <a style=\"color:red;\" onclick=\"return deleteField(this)\" href=\"#\">[—]</a> <input name=\"url[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" /> <a style=\"color:green;\" onclick=\"return addField()\" href=\"#\">[+]</a></nobr>";
     // Добавляем новый узел в конец списка полей
     document.getElementById("parentId").appendChild(div);
     // Возвращаем false, чтобы не было перехода по сслыке
     return false;
    }
    </script>
    
    Ответ написан
    1 комментарий
  • Вывод комментариев с иерархической структурой

    nixmale
    @nixmale
    Если еще актуально, то есть и такое решение habrahabr.ru/qa/7550#answer_32413

    Отличается оно тем, что добавляя коментарии с помощью ajax не обязательно перестраивать все комменты, а можно перегрузить лишь ветку, начинающуюся с коммента на который отвечаете, и без рекурсиии и строковых полей.
    Ответ написан
    Комментировать
  • Идеи для Хабрастартапа: Посевная стадия: Мозговой штурм

    nixmale
    @nixmale
    Все мы ходим по ссылкам, туда сюда с сайта на сайт, но на некоторых сайтах ссылки практически отсутствуют и как показывает практика — это самые удобные сайты.

    Смысл технологии искусственно имитировать такие сервисы путем блокирования 100% ссылок сайта и подмены их javascript обработчиком с ajax`ом, который в 100% случаев отрабатывает вместо перегрузки страницы, хорошо экономя при этом трафик.

    И это все автоматически накладывается на любой метод контроллера того модуля, который в данный момент работает. Модулей может быть чуть ли не бесконечное количество, и все они, независимо от того кто их писал, попадают под влияние javascript обработчика.

    Если в трех словах, то я разработал такую среду, в которой php код не главный, а выполняет команды javascript`а, если поддержки javascript нет, работает в обычном режиме. С такой библиотекой можно из любого сайта, например хабра, сделать одностраничное приложение.

    Но не все так просто. Чтобы сделать хабр одностраничным, нужен класс, который будет содержать методы, которые в совокупности описывают все обращения. Другими словами весь хабр должен рождаться в одном классе, а какие уже там в дальнейшем фреймворки он будет использовать, или еще что-то — не важно, хоть к своей базе пусть коннектиться.

    И вот идея. Создать на основе среды ресурс, который будет предоставлять всем те же сервисы которыми они пользуются, только более удобными и легкими (клиентская библиотека, кстати, не превышает 15 Кб). Для того чтобы открыть новый сервис достаточно прислать папку с файлами, один из которых заветный класс контроллер.

    Сопряжение модулей тщательно проработано и вынесено в отдельное меню, которое выглядит как «панель быстрого запуска» операционной системы windows и так же имеет фиксированное положение. Стоит добавить новый модуль в систему и его сразу можно перетащить в свое меню. Между модулями работает трей, запоминая на какой странице модуля вы последний раз были.

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

    Ищу заинтересованных в развитии подобного ресурса людей.
    Самая большая проблема — дизайнер. Из-за его отсутствия все стоит.
    Ответ написан
  • Идеи для Хабрастартапа: Посевная стадия: Мозговой штурм

    nixmale
    @nixmale
    Я тоже предложу один проект, правда не знаю как это правильно описать.
    Вообщем я хочу не какой либо сервис продвинуть, а предложить новую технологию, о которой пока не знают ни в Яндекс, ни даже в Google, и на основе ее создать конкурентный брэнд. Быстро перестроиться эти компании не смогут, так как сами на корню ее присекли, а значит есть шанс составить серьезную конкуренцию. Для этого необходима группа серьезных и заинтересованных в этом людей, не боящихся например фразы «Конкурировать с Яндексом».

    Продолжать?
    Ответ написан
    5 комментариев
  • Древовидные комментарии

    nixmale
    @nixmale
    Если речи идет о SQL, то есть одно очень хорошее решение для сортировки древовидных комментариев в один SQL запрос без LEFT JOIN, кстати которое с применением AJAX позволяет перезагружать отдельные ветки, начинающиеся с любого комментария в цепочки.

    Предположим добавление комментариев к теме выглядит следующим образом:
    $arr = array(
         array('id'=>1, 'pid'=>0, 'name'=>'Comment 1'),
          array('id'=>2, 'pid'=>1, 'name'=>'Comment 1.1'),
          array('id'=>3, 'pid'=>1, 'name'=>'Comment 1.2'),
          array('id'=>6, 'pid'=>1, 'name'=>'Comment 1.3'),
           array('id'=>4, 'pid'=>2, 'name'=>'Comment 1.1.1'),
           array('id'=>5, 'pid'=>2, 'name'=>'Comment 1.1.2'),
           array('id'=>7, 'pid'=>2, 'name'=>'Comment 1.1.3'),
         array('id'=>8, 'pid'=>0, 'name'=>'Comment 2'),
          array('id'=>12, 'pid'=>8, 'name'=>'Comment 2.1'),
          array('id'=>17, 'pid'=>8, 'name'=>'Comment 2.2'),
           array('id'=>13, 'pid'=>12, 'name'=>'Comment 2.1.1'),
            array('id'=>16, 'pid'=>13, 'name'=>'Comment 2.1.1.1'),
         array('id'=>9, 'pid'=>0, 'name'=>'Comment 3'),
          array('id'=>14, 'pid'=>9, 'name'=>'Comment 3.1'),
           array('id'=>15, 'pid'=>14, 'name'=>'Comment 3.1.1'),
         array('id'=>10, 'pid'=>0, 'name'=>'Comment 4'),
         array('id'=>11, 'pid'=>0, 'name'=>'Comment 5'),
         );
    


    Каждый комментарий имеет id и id родителя (pid). Ответ на тему должен принимать pid = 0, а ответ на комментарий — id комментария на который отвечаете соответственно. В конечном итоге дерево должно выглядеть так, как показано в массиве образце.

    Чтобы раскрыть дерево за 1 SQL, достаточно достать из базы все комментарии имеющие идентификатор темы, отсортировав их так: ORDER BY pid ASC, id ASC. В результате получим следующий массив.

    $arr = array(
         array('id'=>1, 'pid'=>0, 'name'=>'Comment 1'),
         array('id'=>8, 'pid'=>0, 'name'=>'Comment 2'),
         array('id'=>9, 'pid'=>0, 'name'=>'Comment 3'),
         array('id'=>10, 'pid'=>0, 'name'=>'Comment 4'),
         array('id'=>11, 'pid'=>0, 'name'=>'Comment 5'),
          array('id'=>2, 'pid'=>1, 'name'=>'Comment 1.1'),
          array('id'=>3, 'pid'=>1, 'name'=>'Comment 1.2'),
          array('id'=>6, 'pid'=>1, 'name'=>'Comment 1.3'),
           array('id'=>4, 'pid'=>2, 'name'=>'Comment 1.1.1'),
           array('id'=>5, 'pid'=>2, 'name'=>'Comment 1.1.2'),
           array('id'=>7, 'pid'=>2, 'name'=>'Comment 1.1.3'),
         array('id'=>12, 'pid'=>8, 'name'=>'Comment 2.1'),
          array('id'=>17, 'pid'=>8, 'name'=>'Comment 2.2'),
          array('id'=>14, 'pid'=>9, 'name'=>'Comment 3.1'),
          array('id'=>13, 'pid'=>12, 'name'=>'Comment 2.1.1'),
           array('id'=>16, 'pid'=>13, 'name'=>'Comment 2.1.1.1'),
           array('id'=>15, 'pid'=>14, 'name'=>'Comment 3.1.1'),
         );
    


    Теперь требуется изменить структуру массива.

         for ($i = 0, $c = count($arr); $i < $c; $i++)
         {
           $new_arr[$arr[$i]['pid']][] = $arr[$i];
         }
    


    И завершающая рекурсионная функция.

         function my_sort($data, $parent = 0, $level = 0)
         {
           $arr = $data[$parent];
    
           for($i = 0; $i < count($arr); $i++)
           {
             echo '<div style="padding-left:' . $level . 'px;">';
             echo $arr[$i]['name'];
               if(isset($data[$arr[$i]['id']])) my_sort($data, $arr[$i]['id'], 20);
             echo '</div>';
           }
         }
    


    Теперь чтобы показать все дерево одним разом, достаточно вызвать

    my_sort($new_arr, 0);
    Ответ написан
    6 комментариев
  • За что минусуют карму?

    nixmale
    @nixmale
    За то же, за что другие плюсуют.

    Вот этот комментарий говорит о том, что помимо автора комментария, еще как минимум 93 человека не понимают что если бояться кавычек, то лучше вообще не заниматься программированием.
    Ответ написан