Jump to content

Vlad

Moderator
  • Posts

    6,588
  • Joined

  • Last visited

  • Days Won

    55

Everything posted by Vlad

  1. Vlad

    height в IE

    Если DOCTYPE убрать вообще, тоже работать должно.
  2. Vlad

    mcbes

    Ну вот, опять начинается святая война против FP. Пусть делает в чем хочет, это его дело.
  3. Vlad

    height в IE

    Решение вопроса, не устану повторять, очень простое. Не надо извращаться с высотой слоя, пусть она соответствует высоте содержимого.
  4. Шаблон Smarty представляет собой обычный HTML-документ с добавленными в него специальными smarty-тегами. По умолчанию эти теги заключаются в фигурные скобки ? {тег}. При выводе шаблона эти теги обрабатываются компилятором и в зависимости от их назначения ? переменная или функция, отображается желаемый результат. В примере 1 приведен шаблон, в котором одновременно встречаются теги HTML и smarty-теги. Пример 1. Файл с шаблоном {include file="header.tpl" title="HTML и CSS"} <div id="col1"> <p id="tagtitle">Теги HTML</p> <div class="panel"> <div><a href="/html/">Все теги</a></div> {foreach from="$tag" item="entry"} <div><a href="/html/{$entry.html_tag|lower}.html">{$entry.html_tag}</a></div> {/foreach} </div> <p id="csstitle">Свойства CSS</p> <div class="panel"> <div><a href="/css/">Все свойства</a></div> {foreach from="$css" item="entry"} <div><a href="/css/{$entry.css_name|lower}.html">{$entry.css_name}</a></div> {/foreach} </div> {include file="footer.tpl"} В данном примере совместно применяются HTML-теги, переменные и функции Smarty. Теги HTML Любые элементы HTML вставляются в шаблон в своем исходном виде, за исключением фигурных скобок, которые понимаются Smarty как внутренние команды. Подобные скобки могут встречаться в тексте или в скриптах для обозначения функций. В этом случае следует использовать команду {literal}...{/literal} чтобы показать Smarty, что скобки следует отображать ?как есть?. Также допустимо переназначить фигурные скобки для обозначения команд на нечто иное. Поскольку на сайтах часто определенные элементы повторяются на каждой странице, имеет смысл разделить один шаблон на несколько файлов. Для этого применяется функция {include} как показано в примере 1. В качестве значения параметра file берется имя подключаемого шаблона. Переменные пользователя Все переменные Smarty, заданные через PHP указываются в фигурных скобках и со знаком доллара, например ? {$text}. Само определение переменной в PHP-файле происходит с помощью метода assign, как показано в примере 2. Пример 2. Создание и использование пользовательских переменных Файл index.php $smarty = new Smarty; $smarty->assign("titlePage", "Фотографии пользователей"); $smarty->assign("numPhoto", 1260); $smarty->display("photo.tpl"); Файл photo.tpl {include file="header.tpl" title=$titlePage} <h1>{$titlePage}</h1> <p>На сайте фотографий пользователей: {$numPhoto} штук.</p> Вначале в PHP-файле определяются все необходимые переменные, которые передаются в шаблон через метод assign. В самом шаблоне переменные встраиваются в код HTML со знаком $ впереди и в фигурных скобках. Smarty не ограничивается простыми переменными, допустимо вставлять в шаблон любые значения числовых и ассоциативных массивов. В примере 3 показана работа с такими массивами. Пример 3. Вывод значений массивов Файл index.php <?php require ('inc/path.php'); require (SMARTY_DIR . 'setup.php'); $smarty = new Smarty; $cmyk = array("c" => "cyan", "m" => "magenta", "y" => "yellow", "k" => "black"); $fibo = array(1=>1, 1, 2, 3, 5, 8, 13, 21, 34); $smarty->assign("cmyk", $cmyk); $smarty->assign("fibo", $fibo); $smarty->display('index.tpl'); ?> Файл index.tpl <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> <title>Массивы</title> </head> <body> <p>{$fibo[6]}</p> <p>{$cmyk.c}</p> </body> </html> В данном примере в первой строке будет показано число 8, а во второй строке выведется текст ?cyan?. Переменные $smarty Для обращения к зарезервированным в PHP массивам GET, POST, COOKIES, SERVER, ENV и SESSION применяется специальная переменная $smarty. Вначале пишется $smarty, затем после точки имя массива PHP, дальше чего через точку указывается имя переменной пользователя. В табл. 1 приведены некоторые переменные запроса. Табл. 1. Получение переменных запроса через Smarty $smarty.get.id Значение id, полученное через метод GET $smarty.post.name Значение name, полученное через метод POST $smarty.cookies.user Значение user, хранящееся в кукисах $smarty.session.time Значение time, хранящееся в сессии $smarty.server.SCRIPT_NAME Вывод переменной сервера SCRIPT_NAME Подобные переменные удобны при получении данных форм, что и продемонстрировано в примере 4. Пример 4. Вывод значений формы <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> <title>Формы</title> </head> <body> {if $smarty.post.user} <p>Вы ввели имя: {$smarty.post.user}</p> {/if} <form action="" method="post"> <p>Введите ваше имя</p> <p><input type="text" size="30" name="user"></p> <p><input type="submit" value="Отправить" name="send_form"></p> </form> </body> </html> В текущем примере используется функция {if}, которая проверяет, получены ли данные по методу POST и выводит значение user при ее наличии. Переменные файлов конфигурации Конфигурационные файлы нужны для хранения каких-либо типовых значений и могут включать в себя текст, числа, цвета и др. Обращение к переменным таких файлов состоит из некоторых шагов. Вначале следует создать файл (он обычно имеет расширение conf) и сохранить его в папке smartyconfigs. Содержимое этого файла состоит из имени переменной и значения в кавычках (пример 5). Пример 5. Содержимое конфигурационного файла bgcolor = "#f0f0f0" command = "Извлечь" num = "5" Как видно из данного примера, каждая переменная занимает одну строку в тексте. Для обращения к переменным в шаблоне вначале следует загрузить конфигурационный файл через функцию {config_load file="имя файла"}, после чего вписать имя переменной в виде {#переменная#}, как показано в примере 6. Пример 6. Использование конфигурационных переменных {config_load file="main.conf"} <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>{#title#}</title> </head> <body> <table width="{#widthTable#}" border="0" cellspacing="0" cellpadding="4"> <tr> <td width="20%" align="{#align#}"><a href="#">Lorem</a></td> <td width="20%" align="{#align#}"><a href="#">Ipsum</a></td> <td width="150"><a href="#"><img src="" name="Logo" width="150" height="70" border="0" style="background-color: {#bgCell#}"></a></td> <td width="20%" align="{#align#}"><a href="#">Dolar</a></td> <td width="20%" align="{#align#}"><a href="#">Sic</a></td> </tr> </table> </body> </html> В данном примере переменные title, align, widthTable, bgCell задаются в файле main.conf. Функции Функции Smarty очень похожи по синтаксису на переменные, но пишутся без знака $ в начале, например {if}, упоминаемая ранее. Большинство функций содержат аргументы, которые расширяют возможности по настройке этих функций. Все аргументы указываются через пробел, значения заключаются в одинарные, двойные кавычки или пишутся вообще без них. Исключением является текст, который всегда должен писаться в кавычках. Также внутри функций можно задавать переменные, как показано в примере 7. Пример 7. Использование функций {assign var="cssfile" value="fp.css"} {include file="header.tpl"} <div id="container"> <h1>Последние добавленные фотографии</h1> {foreach from="$lastphoto" item="entry"} <div class="thumb"><a href="/photo/?id={$entry.photo_id}"><img src="/thumb/{$entry.photo_thumb}" width="120" height="120" alt="{$entry.photo_title}"></a></div> {/foreach} <h1>Популярные фотографии</h1> <table width="100%" border="0" cellspacing="0" cellpadding="4" class="thumbdescr"> {foreach from="$popular" item="entry"} <tr> <td width="130"><a href="/photo/?id={$entry.photo_id}"><img src="/thumb/{$entry.photo_thumb}" alt="{$entry.photo_title}"></a></td> <td> <p>Название: {$entry.photo_title}</p> <p>Категория: <a href="/photo/?pid={$entry.theme_id}">{$entry.theme_title}</a></p> {if $entry.photo_year && $entry.photo_year != "0000"}<p>Год: {$entry.photo_year}</p>{/if} <p>Размер: {$entry.width} x {$entry.height}</p> <p>Объем: {$entry.size} Кб</p> <p>{$entry.count_total}</p> </td> </tr> {/foreach} </table> </div> {include file="footer.tpl"} В данном примере встречается несколько функций ? {assign}, {include}, {foreach}, {if}.
  5. Как пользователи будут мышью перетаскивать 20 тыщ записей? Или им выводится ограниченное число?
  6. Браузер IE? Попробуй в одну строчку написать код с таблицей и посмотреть результат.
  7. Можно прописать для этого слоя max-width: 171px
  8. В дальнейшем будем предполагать, что у вас установлен веб-комплект Денвер и вы тестируете свой сайт на локальном компьютере под управлением Windows. Вначале скачайте последнюю версию Smarty с сайта http://smary.php.net и распакуйте архив. Несмотря на обилие в архиве директорий и файлов, нас интересует лишь одна папка libs. Создайте на диске Z, который автоматически подключается после установки Денвера, внутри home папку с именем вашего сайта и в нее добавьте папку libs. Далее создайте еще одну папку с именем smarty, внутри которой располагаются следующие подпапки: cache, config, templates, templates_c. Вся структура папок на примере сайта webimg.ru приведена ниже. Z:homewebimg.ru libs smarty cache config templates templates_c www Имена на приведенной схеме не зря выделены жирным начертанием. Для этих папок необходимо установить права 770 [rwx rwx —] или 775 [rwx rwx r-x]. Поскольку под Windows подобные права никак не меняются, то этот пункт имеет важность только при переносе сайта под *nix-сервер. Каждая из папок Smarty несет определенную нагрузку. Так, папка cache содержит кэшированные документы, предназначенные для ускорения работы сайта путем сохранения результатов в файлы. Config содержит конфигурационные настройки, templates это основная часть, содержащая все шаблоны, а templates_c ? скомилированные шаблоны. При этом содержимое двух папок ? cache и templates_c формируется автоматически. В папке libs создайте файл setup.php, который будет содержать следующий код (пример 1). Пример 1. Содержимое файла setup.php <?php require ("Smarty.class.php"); class Smarty_WebImg extends Smarty { function Smarty_WebImg() { $this->Smarty(); $this->template_dir = "/home/webimg.ru/smarty/templates/"; $this->compile_dir = "/home/webimg.ru/smarty/templates_c/"; $this->config_dir = "/home/webimg.ru/smarty/configs/"; $this->cache_dir = "/home/webimg.ru/smarty/cache/"; } } ?> Класс Smarty_WebImg носит имя, которое устанавливается по желанию. Учтите только, что оно будет применяться повсеместно. Далее идут пути ко всем служебным директориям Smarty. Теперь создаем шаблон главной страницы сайта, назовем его index.tpl и сохраним в папке templates (пример 2). Пример 2. Файл шаблона index.tpl <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 //EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> <title>{$title}</title> </head> <body> <h1>Сайт WebImg.ru</h1> <p>Все работает!</p> </body> </html> Это обычный HTML-документ, единственное, что его отличает, это переменная {$title}, она определяется в файле index.php, который располагается в папке www (пример 3). Пример 3. Содержимое файла index.php <?php require ("/home/webimg.ru/libs/setup.php"); $smarty = new Smarty_WebImg; $smarty->assign("title", "Сайт WebImg.ru - главная страница"); $smarty->display("index.tpl"); ?> Вначале следует обратиться к файлу setup.php, который располагается в папке libs, чтобы Smarty понимал, в каких папках следует искать шаблоны. Далее создаем экземпляр Smarty с именем Smarty_WebImg (вспоминаем, что ранее сами так его обозвали), при этом все настройки будут заданы автоматически. Остается определить значение заданных в шаблоне переменных через метод assign и загрузить требуемый шаблон с помощью метода display. Окончательно проверяем работу всех компонентов, загрузив в браузере сайт webimg.ru. Должна отобразиться страница с надписью ?Все работает!?. Возможные ошибки при установке Любые ошибки, возникающие при первой установке и настройки Smarty, как правило, связаны с невнимательностью и решаются проверкой всех компонент, а именно, файлов setup.php, index.tpl и index.php. Тем не менее, приведем некоторые типичные ошибки. Warning: require(/home/webimg.ru/libs/setup.php) [function.require]: failed to open stream: No such file or directory in z:homewebimg.ruwwwindex.php on line 3 Вызываемый файл setup.php отсутствует в папке /home/webimg.ru/libs. Fatal error: Class 'Smarty_WebImg' not found in z:homewebimg.ruwwwindex.php on line 5 Имя класса Smarty_WebImg упоминается три раза, два из них в файле setup.php и еще один в файле index.php. Проверьте, чтобы имена в этих документах писались одинаково. Warning: Smarty error: unable to read resource: "index.tpl" in z:homewebimg.rulibsSmarty.class.php on line 1095 Ошибка в описании путей к требуемым директориям. Откройте файл setup.php и удостоверьтесь, все ли заданные в переменных папки существуют и правильно ли указан к ним путь. Notice: Undefined variable: title in z:homewebimg.ruwwwindex.php on line 7 Скорее всего, переменная title записана как $title. Хотя в PHP все переменные определяются со знаком $ впереди, Smarty использует это правило не во всех случаях. Fatal error: Smarty error: [in index.tpl line 5]: syntax error: unrecognized tag 'title' (Smarty_Compiler.class.php, line 580) in z:homewebimg.rulibsSmarty.class.php on line 1095 Здесь ситуация с точностью до наоборот, в файле index.tpl заголовок веб-страницы записан как {title} без знака $. Заметим также, что если указанный заголовок вообще не отображается, то, скорее всего, переменная title задана неверно. Smarty в подобных случаях не выводит сообщение об ошибке, но и не показывает значение переменной.
  9. Точно, промашка вышла. Но все равно, копать надо в сторону JS.
  10. Пересчет по ночам хотя и хорош, но никак не виден пользователям. Т.е. они сами меняют свою позицию, а изменения видны только утром. Лучше всего наверное выделить позицию в отдельную таблицу и обновлять только ее. Как вариант - использовать метод пузырька. Каждый пользователь вводит некое число, чем оно больше, тем выше поднимается. Тогда пересчет позиции не нужен, требуется только сортировать по условному числу. Но это опять несет некоторые неудобства.
  11. Насколько понял, надо открыть сразу две ссылки. Ну тогда JavaScript. это извращение
  12. Рекомендую записывать все в одном свойстве background. И код сокращается и ошибок будет меньше. А еще для начала поставить какую-нибудь прогу, которая проверяет код CSS на ошибки.
  13. Два варианта в основном используется. 1. Рисунок логотипа небольшой по ширине и не влияет на общий макет. На этом сайте так сделано. 2. Логотип добавляется в виде фона к слою.
  14. Вот здесь еще про прозрачность упоминается. http://tigir.com/opacity.htm
  15. Мда, переделывать многое придется, а никому неохота.
  16. сзвзбзднул. 10 букв даже получилось.
  17. ARA и не говорил, что квартиру в Москве покупает, грит, дорогу туда прокладывает, асфальтоукладчиком значит работает.
  18. Для каждого тега TR пропиши свой класс и меняй его параметры через стили.
  19. Есть, называется индукция - от общего к частному. Вначале описываешь свойства для корневых элементов, потом переходишь к отдельным элементам.
  20. Есть три основные схемы: табличная, каскадная и с фреймами. Чего уж велосипед изобретать, форум должен быть удобным, а не оригинальным.
  21. Ну, конечно, все новозеландцы любят говорить: а пойдем-ка на Таумата... сходим, вот соседи уже на Таумата... сходили, а что же мы не посетим Таумата... Так и возненавидеть этот холм недолго.
  22. Понятно, проблемы с SWF. Отдельный файл открылся.
  23. Все браузеры так поступают или какой конкретно?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy