<div class="articleContent"> <p class="redLetter">Большенству веб-разработчиков, более или менее тесно общавшихся с разметкой известно, что выпадающие списки – <strong><select></strong> – как таковые невозможно отстилить. «Веб-разработчик – технарь, у него нет эстетического воображения» – подумает дизайнер и нарисует «красивые» селекты. Мало того, бизнес (заказчики или менеджеры) посмотрят и решат, что красиво – правильно. И вот стоишь ты один в поле и кручинишься, куда же тебя судьбинушка завела.</p> <p>Сами селекты отстилить нельзя, зато можно сделать для них красивую обертку можно. Что нам для этого нужно:</p> <ol> <li>Не самые глубокие познания в <strong>HTML</strong></li> <li>Advanced скилы в <strong>CSS</strong></li> <li>Немного <strong>JavaScript</strong></li> <li>Холодную голову</li> <li>Крепкие нервы</li> <li>Пол-литра пива</li> </ol> <p>Есть, к примеру, дизайн страницы и в нем вот такое чудо, которое должно исполнять роль селекта:</p> <div style="text-align: center;"><img width="221" height="45" title="select_01" alt="" src="http://frontendblog.info/post-images/2010/08/select_01.png"></div> <p>Ну и предположим, что дизайна на саму выпадающую часть у нас нет – значит подойдет и стандартная. Дальше буду рассказывать про то как минимизировать труды с максимумом пользы.</p> <p>Делаем красивую <strong>HTML</strong>ку, как нас просит дизайн, абсолютно-позицыонируем над ней селект и прячим селект. Ну хорошо, скажите Вы, и как же заставить всю эту громадину работать, если всем известно, что <strong>JavaScript</strong>‘ом селект не откроешь? Дочитай до конца и не лезь вперед батьки, отвечу я. Вот Вам селект, попробуйте в него покликать, в любое место, в любом браузере:</p> <div style="text-align: center;"> <select> <option>————</option> <option>11111111</option> <option>22222222</option> <option>22222222</option> <option>22222222</option> </select> </div> <p>Удивительно, не правда ли? Он открывается куда бы в него ни кликнули. Вот на этом и построим весь принцып работы нашего красивого селекта. При этом все-таки можно задать ему размеры:</p> <pre><code class="html"><span class="html__tag_start"><select</span> <span class="html__attr_name">style</span>=<span class="html__attr_value">"width: 200px; height: 30px;"</span><span class="html__tag_start">></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>------------<span class="html__tag_end"></option></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>11111111<span class="html__tag_end"></option></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>22222222<span class="html__tag_end"></option></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>22222222<span class="html__tag_end"></option></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>22222222<span class="html__tag_end"></option></span> <br><span class="html__tag_end"></select></span> <br></code></pre> <div style="text-align: center;"> <select style="width: 200px; height: 30px;"> <option>————</option> <option>11111111</option> <option>22222222</option> <option>22222222</option> <option>22222222</option> </select> </div> <p>Как всегда, первым делом <strong>HTML</strong>:</p> <pre><code class="html"><span class="html__tag_start"><span</span> <span class="html__attr_name">class</span>=<span class="html__attr_value">"select"</span><span class="html__tag_start">></span> <br> <span class="html__tag_start"><span</span> <span class="html__attr_name">class</span>=<span class="html__attr_value">"left"</span><span class="html__tag_start">></span> <br> <span class="html__tag_start"><span</span> <span class="html__attr_name">class</span>=<span class="html__attr_value">"button"</span><span class="html__tag_start">></span> <br> <span class="html__tag_start"><span</span> <span class="html__attr_name">class</span>=<span class="html__attr_value">"center"</span><span class="html__tag_start">></span><span class="html__tag_end"></span></span> <br> <span class="html__tag_end"></span></span> <br> <span class="html__tag_end"></span></span> <br> <span class="html__tag_start"><select</span><span class="html__tag_start">></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>------------<span class="html__tag_end"></option></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>11111111<span class="html__tag_end"></option></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>22222222<span class="html__tag_end"></option></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>22222222<span class="html__tag_end"></option></span> <br> <span class="html__tag_start"><option</span><span class="html__tag_start">></span>22222222<span class="html__tag_end"></option></span> <br> <span class="html__tag_end"></select></span> <br><span class="html__tag_end"></span></span> <br></code></pre> <p>Здесь будет использоваться тот же принцип, что и в посте про <a class="mylink" href="/styles/prettiness/pretty-buttons/">кнопки</a>, и, самое главное, очень похожий спрайт:</p> <div style="text-align: center;"><img width="100" height="110" title="select_bg" alt="" src="http://frontendblog.info/post-images/2010/08/select_bg.png"></div> <p>Вы, наверное, заметили, что вместо излюбленных всеми дивов, я использовал здесь спаны. А сделал я это из простой лени. Как известно, великий и неповторимый IE7 не очень любит, когда нативно-блочные элементы принуждают быть инлайн-блочными, и игнорирует такое обращение с ними. Так что выхода остается 2 – либо некрасивый хак, либо красивый спан <img class="wp-smiley" alt=":)" src="http://frontendblog.info/wp-includes/images/smilies/icon_smile.gif"> Я за второе.</p> <p>Давайте пока забьем на сам селект и по-быстрому набросаем его обложку. Стили там тоже не сложные, как и у кнопок:</p> <pre><code class="css"><span class="css__class">.select</span> { <br> <span class="css__property">display:</span> <span class="css__value">inline</span>-<span class="css__value">block</span>; <br> <span class="css__property">position:</span> <span class="css__value">relative</span>; <span class="css__comment">/* основа для <br> позиционирования селекта */</span> <br>} <br><span class="css__class">.select</span> <span class="css__element">span</span> { <br> <span class="css__property">background-image:</span> <span class="css__url">url(</span>/* здесь путь к спрайту */<span class="css__url">)</span>; <br> <span class="css__property">display:</span> <span class="css__value">block</span>; <span class="css__comment">/* применение бокс-модели */</span> <br> <span class="css__property">cursor:</span> <span class="css__value">pointer</span>; <br> <span class="css__property">height:</span> <span class="css__number">30px</span>; <span class="css__comment">/* высота части спрайта */</span> <br> <span class="css__property">line-height:</span> <span class="css__number">30px</span>; <span class="css__comment">/* выравниваем текст по высоте */</span> <br>} <br><span class="css__class">.select</span> <span class="css__class">.left</span> { <br> <span class="css__property">background-position:</span> <span class="css__number">0px</span> <span class="css__number">0px</span>; <span class="css__comment">/* позиционируем спрайт */</span> <br> <span class="css__property">padding-left:</span> <span class="css__number">10px</span>; <span class="css__comment">/* ширина соотв. части в спрайте */</span> <br> <span class="css__property">background-repeat:</span> <span class="css__value">no-repeat</span>; <br>} <br><span class="css__class">.select</span> <span class="css__class">.button</span> { <br> <span class="css__property">background-position:</span> <span class="css__value">right</span> -<span class="css__number">80px</span>; <span class="css__comment">/* позиционируем спрайт */</span> <br> <span class="css__property">padding-right:</span> <span class="css__number">30px</span>; <span class="css__comment">/* ширина кнопки в спрайте */</span> <br> <span class="css__property">background-repeat:</span> <span class="css__value">no-repeat</span>; <br>} <br><span class="css__class">.select</span> <span class="css__class">.center</span>{ <br> <span class="css__property">background-position:</span> <span class="css__value">left</span> -<span class="css__number">40px</span>; <span class="css__comment">/* позиционируем спрайт */</span> <br> <span class="css__property">background-repeat:</span> <span class="css__value">repeat-x</span>; <br> <span class="css__property">width:</span> <span class="css__number">150px</span>; <br>} <br></code></pre> <p> На этом этапе мы имеем вполне красивую и соответствующую дизайну непонятную штуку и селект:</p> <div style="text-align: center;"><img width="250" height="78" title="select_02" alt="" src="http://frontendblog.info/post-images/2010/08/select_02.png"></div> <p>Теперь надо расположить селект поверх нашего непойми чего и выровнять его размеры:</p> <pre><code class="css"><span class="css__class">.select</span> <span class="css__element">select</span> { <br> <span class="css__property">position:</span> <span class="css__value">absolute</span>; <br> <span class="css__property">width:</span> <span class="css__number">190px</span>; <br> <span class="css__property">height:</span> <span class="css__number">30px</span>; <br> <span class="css__property">left:</span> <span class="css__number">0px</span>; <br> <span class="css__property">top:</span> <span class="css__number">0px</span>; <br>}</code></pre> <p>А чтобы было проще с размерами определяться, сделаем селект маленько прозрачным:</p> <pre><code class="css"><span class="css__class">.select</span> <span class="css__element">select</span> { <br> <span class="css__property">position:</span> <span class="css__value">absolute</span>; <br> <span class="css__property">width:</span> <span class="css__number">190px</span>; <br> <span class="css__property">height:</span> <span class="css__number">30px</span>; <br> <span class="css__property">left:</span> <span class="css__number">0px</span>; <br> <span class="css__property">top:</span> <span class="css__number">0px</span>; <br> opacity: .<span class="css__number">2</span>; <br> <span class="css__property">filter:</span> alpha(opacity=<span class="css__number">20</span>); <br>}</code></pre> <p>Получившийся результат посмотрим, пощелкаем покликаем……:</p> <style type="text/css"> .select select { position: absolute; width: 190px; height: 30px; left: 0px; top: 0px; opacity: .4; filter: alpha(opacity=40); } .select select.transparent { opacity: 0; filter: alpha(opacity=0); } .select { display: inline-block; position: relative; /* основа для позиционирования селекта */ } .select span { background-image: url(/post-images/2010/08/select_bg.png); display: block; /* применение бокс-модели */ cursor: pointer; height: 30px; /* высота части спрайта */ line-height: 30px; /* выравниваем текст по высоте */ text-align: left; } .select .left { background-position: 0px 0px; /* позиционируем спрайт */ padding-left: 10px; /* ширина соотв. части в спрайте */ background-repeat: no-repeat; } .select .button { background-position: right -80px; /* позиционируем спрайт */ padding-right: 30px; /* ширина кнопки в спрайте */ background-repeat: no-repeat; } .select .center{ background-position: left -40px; /* позиционируем спрайт */ background-repeat: repeat-x; width: 150px; } </style> <div style="text-align: center;"> <span class="select"><span class="left"><span class="button"><span class="center"></span></span></span><br> <select> <option>————</option> <option>11111111</option> <option>22222222</option> <option>33333333</option> <option>44444444</option> </select> <p> </p></span></div> <p>Заметили? Именно!!! Вот так же я однажды сидел и выравнивал размеры селекта и обратил внимание, что даже если сам селект полупрозрачный его выпадающая част будет видна, а сам он остается кликабельным и активным в форме. И остается только сделать селект полностью прозрачным и прикрутить обработчик небольшой на клик и изменение у селекта:</p> <pre><code class="css"><<span class="css__element">select</span> <br> <span class="css__element">onclick</span>="$(<span class="css__element">this</span>)<span class="css__class">.parent</span>()<span class="css__class">.find</span>('<span class="css__class">.center</span>') <br> <span class="css__class">.html</span>(<span class="css__element">this</span><span class="css__class">.options</span>[<span class="css__element">this</span><span class="css__class">.selectedIndex</span>]<span class="css__class">.text</span>)" <br> <span class="css__element">onchange</span>="$(<span class="css__element">this</span>)<span class="css__class">.parent</span>()<span class="css__class">.find</span>('<span class="css__class">.center</span>') <br> <span class="css__class">.html</span>(<span class="css__element">this</span><span class="css__class">.options</span>[<span class="css__element">this</span><span class="css__class">.selectedIndex</span>]<span class="css__class">.text</span>)" <br>></code></pre> <div style="text-align: center;"> <span class="select"><span class="left"><span class="button"><span class="center">————</span></span></span><br> <select onclick="$(this).parent().find('.center').html(this.options[this.selectedIndex].text)" onchange="$(this).parent().find('.center').html(this.options[this.selectedIndex].text)" class="transparent"> <option>————</option> <option>11111111</option> <option>22222222</option> <option>333333333</option> <option>44444444</option> </select> <p> </p></span></div> <p>Собственно, все.</p> </div>
Синтаксис var newWin = window.open(strUrl, winName [, winParams]) Аргументы
strUrl Адрес для загрузки в новое окно, любая адресная строка, которую поддерживает браузер winName Имя нового окна для использования в параметре target форм и ссылок winParams Необязательный список настроек, с которыми открывать новое окно
Если вы работаете в ОС Linux, то можете собрать его из исходников или установить его средствами самой системы, например в RedHat, yum install git-all. Если вы работаете в Windows, то необходимо скачать MSysGit. Тут вы можете скачать и файлы для самостоятельной сборки дистрибутива msysgit-(net|full)install. Для пользователей MacOS есть своя разработка OSX Installer for Git. В состав сборок Eclipse или входят модули для работы с Git или их можно установить из основного репозитария платформы (EGit и JGit). В установке, я думаю, проблем не возникнет. После установки вам необходимо произвести начальные настройки git. git config --global user.name "Your Name" git config --global user.email "your_email@whatever.com"
В интернете достаточно много информации на данную тему, но, несмотря на это, многие обходят её стороной. Цель данного поста, разъяснить на пальцах основы взаимодействия с Memcached.
Что такое Memcache и какое отношение он имеет к PHP?
Memcache разработан для кэширования данных, генерация которых требует большого количества ресурсов. Такого рода данные могут содержать что угодно, начиная с результатов запроса к базе данных и заканчивая тяжеловесным куском шаблона. Memcached не входит в базовый набор модулей, поставляемых с PHP, однако он доступен в репозитории pecl.
DLE 9 защита от спама Благодаря следующей инструкции ненавистные спамеры не смогут: 1) Размещать комментарии с ссылками на свои "говносайты" от лица Гостей 2) Не смогут использовать второй вид спама, а именно Спама во вкладке профиля бота О себе
Уникализация DLE шаблона. Делаем шаблон уникальным для поисковиков.
Приветствую! Сегодня я хочу рассказать своим читателям о том, как уникализировать шаблон для DataLife Engine (DLE). Наверняка многие, кто занимаются разработкой и продвижением сайтов не раз слышали, что поисковики лояльнее относятся именно к тем сайтам, у которых в наличии имеется уникальный шаблон. Наличие уникального шаблона необычайно важно и для качественного варезника. Ведь, согласитесь, что тому же Яндексу абсолютно не нужен сайт с не уникальным контентом, да ещё и с не уникальным шаблоном. Уникализация DLE шаблона не займёт много времени, но покажет поисковикам, что это действительно годный сайт, а не очередное уг. И так, в этой статье я даю подробную инструкцию, как уникализировать DLE шаблон.