Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - FreeSpace

Страницы: [1] 2
1
Вакансии / Нужен верстальщик
« : 03 Мая 2004, 23:49:44 »
Удаленная работа, $150/месяц.

Обязательные знания X-, D- и просто HTML :), CSS.
Базовые знания яваскрипта обязательны, углубленные приветствуются.
Очень желательны знания основ PHP и принципов работы шаблонизаторов.
Аббревиатура W3C не должна быть для вас загадкой :)
Ну и самое главное, как бы банально это не звучало, - желание верстать чисто и аккуратно.

Связь:
support at infinity dot com dot ua
или ася 325570

2
Базы данных / Первая страница форума
« : 31 Марта 2004, 02:22:02 »
На самом деле, форум я не пишу, но задача схожая.
Есть набор категорий (около 30 штук).
В каждой категории создаются темы.
Нужно вывести список категорий, в котором, помимо всего прочего, должна быть ссылка на последнюю тему.
Хотел сделать всё сам - куда там! Второй день мучаюсь, ищу по форумам, курю доки и копаю чужые сорцы... Хотел вытащить этот кусок из вбуллетня, но его разработчики поступили хитрее - они хранят название и айди последней темы прямо в таблице форумов.
Вот структура моих таблиц (упростил под данный вопрос):
CREATE TABLE `categories` (
    `category_id`smallint(6) unsigned NOT NULL auto_increment,
    `title` varchar(100) NOT NULL default \'\',
    PRIMARY KEY (`category_id`),
);

CREATE TABLE `topics` (
    `topic_id` smallint(6) unsigned NOT NULL auto_increment,
    `category_id` smallint(6) unsigned NOT NULL default \'0\',
    `title` varchar(100) NOT NULL default \'\',
    `timestamp` bigint(20) NOT NULL default \'0\',
    PRIMARY KEY (`topic_id`),
);

Я не буду перечислять все запросы, котороые я перепробовал за эту пару дней. Покажу только последний:
SELECT c.category_id, c.title, t.topic_id, t.title
FROM categories AS c
LEFT JOIN yn_topics AS t ON (c.category_id = t.category_id)
GROUP BY t.topic_id (пробовал и t.category_id)

Запрос возвращает либо все категории, но топики не последние, а первые; либо возвращает все категории (по нескольку раз каждую) + все топики в порядке возрастания таймстемпа. Ещё игрался с ORDER BY t.timestamp DESC (в оригинале у меня стоит ORDER BY c.left, потому что категории лежат в виде nested sets), но оно тоже не дало нужный результат.
Кажется мне, что тут пригодилась бы та директива, о которой я до сих пор не имею ни малейшего представление - HAVING.
Признаться честно, мануал по мускулю для меня до сих пор остается темным лесом - имхо, читать его очень неудобно. Если ответ на мой вопрос есть в нём, ткните, пожалуйста, в конкретное место.

3
Цитировать
CGVictor:
Разрабатываешь _свой_ фотмат для новостей, в котором тебе будет удобнее их редактировать.

Вот специально для таких "умельцев" придумали XML.
Угадай, что будет, если в тексте новости встретятся символы "||"?
Да, конечно, их можно экранировать, но имхо проще выучить XML.

4
Базы данных / Результат голосования
« : 12 Марта 2004, 03:54:03 »
Помогите составить запрос для получения результатов голосования из таблицы с полями topic_id, variant_id.
Поля указывают на идентификатор обсуждения и идентификатор варианта ответа соответственно.
Хотелось бы получить результат вида
variant_id---percentage
Вот всё, что смог пока сделать, но работает этот запрос неправильно:
SELECT variant_id, ROUND(COUNT(variant_id) / COUNT(*)) * 100 FROM votes WHERE topic_id = GROUP BY variant_id
Закралось подозрение, что одним запросом этого не сделать и нужно сначала узнать общее количество голосов для нужного topic_id, но сначала решил у вас уточнить.

5
Всё о Html / Кодировки в многоязычной CMS
« : 29 Февраля 2004, 05:17:27 »
Возник вопрос по организации заполнения данных многоязычной CMS. В принципе, вопрос касается всех существующих кодировок, но для простоты сведу его к частному случаю:
Интерфейс CMS выполнен на русском, соответствующий хидер отправляет сервер в заголовке HTTP-ответа эта же кодировка (windows-1251) прописана в мета-теге.
В самой CMS, кроме ввода русскоязычного контента, предусмотрен ввод немецкого. Но при вводе чисто немецких символов, таких как ä, при передаче серверу они превращаются в html entities. Как можно обойти эти грабли?

6
Я взялся изучать алгоритм nested sets с помошью библиотеки dbtree. И всё вроде мне ясно (теоретически, а на практике в запросы из метода moveAll вникнуть не удалось :)), вот только методов для изменения порядка узлов в пределах одного родителя я не нашел. А очень бы хотелось такое реализовать.
Может кто подкинет ссылку на описание этого алгоритма или словами (можно SQL-запросами :)) объяснит, как это реализовать?

7
PHP / Чистка HTML
« : 06 Февраля 2004, 01:39:31 »
Я написал функцию, которая позволяет чистить HTML от вайтспейсов.
Дабы избежать флейма, сразу оговорюсь:
Да, я знаю, что изобрел велосипед.
Да, я знаю, что существует огромное количество программ, которые делают это быстрее и эффективнее, например Tidy.
И я советую каждому пользоваться именно этой программой, а не моей самописной функцией :)
А взялся я за написание этой функции с одной целью - получить дополнительный опыт, который лишним никогда не бывает.
А теперь я бы хотел узнать ваше мнение - как по-вашему можно оптимизировать этот алгоритм? Мне, например, самому не нравится использование случайной строки для подстановки тегов, но ничего лучше я пока не придумал.
Кроме того, может я какие-то теги забыл, в которых нужно было сохранять форматирование?
function trim_whitespaces ($text)
{
	
// Убираем многострочные теги
	
$tags = array();
	
$tags[\'textarea\']   = $this->tag_replace(\'textarea\', $text);
	
$tags[\'scripts\']    = $this->tag_replace(\'script\', $text);
	
$tags[\'style\']      = $this->tag_replace(\'style\', $text);
	
$tags[\'pre\']        = $this->tag_replace(\'pre\', $text);
	
$tags[\'code\']       = $this->tag_replace(\'code\', $text);

	
$text = preg_replace (\'~(\\\\>)(\\\\s*)(\\\\<)~\', \'\\\\1\\\\3\', $text);
	
$text = preg_replace (\'~(\\\\s+)~\', \' \', $text);

	
// Восстанавливаем многострочные теги
	
foreach ($tags as $tag)
	
{
	
	
$text = str_replace(array_keys($tag), $tag, $text);
	
}

	
return $text;
}

function tag_replace ($tag_name, &$text)
{
	
if (!stristr($text, \'<\'.$tag_name))
	
{
	
	
return array();
	
}

	
// Нам нужно получить уникальную строку, которая НЕ встречается в обрабатываемом тексте
	
do
	
{
	
	
$uniqid = substr(md5(uniqid(rand(), TRUE)), 0, 5);
	
}
	
while(strstr($text, $uniqid));

	
// Ищем все необходимые теги
	
$matches = array();
	
preg_match_all(\'~(<\'.preg_quote($tag_name).\').*(</\'.preg_quote($tag_name).\'>)~isU\', $text, $matches);
	
$matches = $matches[0];

	
// Заменяем теги на безопасну строку
	
$tags = array();
	
foreach ($matches as $k => $tag)
	
{
	
	
// Выглядит примерно как "<[[textarea_f7a53: 0]]/>" , "<[[textarea_f7a53: 1]]/>" и так далее для каждого тега.
	
	
$key = \'<[[\'.$tag_name.\'_\'.$uniqid.\': \'.$k.\']]/>\';
	
	
$tags[$key] = $tag;
	
	
$text = str_replace($tag, $key, $text);
	
}

	
return $tags;
}

8
PHP / FreeSpace и лишние переменные
« : 30 Января 2004, 21:03:14 »
Цитировать
RomikChef:
переменную легче вывести при отладке

Раньше я именно так и делал, но буквально два дня назад наткнулся на размышления о том, что так лучше не делать - не порождать кучу фактически несипользуемых переменных.
Теперь делаю проще - если запрос не работает, заменяю mysql_query на die :)

9
Создаю тему здесь, потому что к HTML она имеет большее отношение, чем непосредственно к PHP.

Недавно столкнулся с глупейшей проблемой:
Если во время редактирования шаблона (темплейта) через веб-интерфейс (конечно же, в теге , то получается... фигня, короче :)
Так вот, как с этим бороться по-грамотному?
Потому что сейчас я просто заменяю на [textarea ***] и [/textarea] соответственно.

10
PHP / Система прав *никсов
« : 12 Июля 2003, 00:11:27 »
Сразу оговорюсь, никсы я знаю очень поверхносно, но вроде бы с системой прав (permissions) знаком.
В споре с другом у нас возникли два вопроса:
1. PHP-скрипт на сервере выполняется с теми правами, которые установлены на него (на сам файл) или с правами веб-сервера?
2. Есть ли разница в правах работы скрипта при установке PHP как модуля Апача и как CGI приложение?

11
Не пинайте ногами и не отправляйте меня к яваскрипту! :)
Дочитайте вначале до конца.

Проблема моя в том, что мне нужно построить древовидную менюшку для навигации по шаблонам (немного похожую на ту, которая есть в vBulletin\'не).
Но шаблоны хранятся не в базе данных, а в папке в таком виде:
Цитировать
admin_modlist_bit.tpl
admin_main.tpl
admin_modlist.tpl
form_end.tpl
form_select_end.tpl
form_select_item.tpl
form_select_start.tpl
form_checkbox.tpl
form_file.tpl
form_hidden.tpl
form_password.tpl
form_radio.tpl
form_reset.tpl
form_start.tpl
form_submit.tpl
form_text.tpl
form_textarea.tpl

Из этого списка я хочу сделать разворачивающееся дерево.
Сегодня 3 часа мучался над этой задачей.
Примерный алгоритм мой был таков:
1. Читаю в цикле все файлы в массив.
2. Разбиваю explode()\'ом каждый файл на части.
Но что потом делать с этими частями, как их правильно собрать вместе и отобразить в виде меню я так и не придумал. А ещё ведь нужно к каждому "конечному" (не узловому) пункту привязать имя самого файла с шаблоном...
Перерыл все поисковики, каталоги скриптов и форумы по php, которые только знал.
Честно признаюсь, рекурсивные функции из файловых менеджеров я ещё не рассматривал - просто голова уже совсем не варит, завтра буду в них копаться.
Если кто-нибудь подскажет, что мне нужно почитать чтобы решить эту задачку, буду примного благодарен!

PS: Решение я всё-же нашел, но оно было настолько кривое, что я от него сразу же отказался.

12
Флейм / Что такое ТЗ?
« : 30 Мая 2003, 01:19:44 »
До прихода на этот форум, вообще не знал, что есть такая штука, как техническое задание.
Точнее я догадывался, что что-то подобное есть, но не знал, как оно называется.
Не могли бы вы рассказать, как его правильно составлять и если не сложно - дать пару ссылочек на готовые.

13
Есть скрипт, который отдает картинки пользователю так: pictures.php?id=13
Вопрос прост:
Какой ещё хидер посылать, кроме "Content-Type: image/jpeg", чтобы такая картинка нормально кешировалась проксями и, главное, пользовательскими браузерами?
Пробовал "Cache-Control: public", "Expires: " . gmdate("D, d M Y H:i:s", time() + 999999999) . " GMT".
Пробовал даже так:

Header
("Cache-Control: public, must-revalidate");
Header("Vary: Content-ID");
Header("Content-ID: ".md5($raw_jpeg_data));

Не получается вообще никак!
Короче перепробовал всё, о чем написано тут и в ссылках в конце этой статьи.
Тестировал на Опере 7.10, потому что ИЕ браузером можно назвать только с натяжкой :)
(для сторонников осликов: скрипт пишу в первую очередь для себя, поэтому и поддержку Оперы хочу обеспечить стопроцентную. Тем более, имхо если с Оперой всё будет ОК, то с ИЕ - и подавно!)
Кстати, в File\\Preferences\\History and Cache галочку Always check redirect напротив Check images убрал, а сам Check images поставил на Never уже давно - всё равно не помогает :(

14
PHP / Чудеса с include_path
« : 19 Апреля 2003, 23:43:18 »
У меня такой вот вопросик по инклюдам (и рекваерам соответственно ;)):
Есть вот такик вот файлики:

index.php
GLOBALS/global.php
GLOBALS/config.php
GLOBALS/functions.php


Файл index.php:

<?php
require_once("GLOBALS/global.php");
bla-bla-bla...
?>


Файл GLOBALS/global.php:

<?php
require_once("config.php");
require_once(
"functions.php");
?>


Так вот, когда скрипт запускаю на своём компьютере (Apache/1.3.27 (Win32) PHP/4.3.0) всё работает отлично, но когда закачиваю на хостинг (*никсовый), начинает ругаться в global.php мол не могу реквайрить, нету таких файлов.
Немного помучался с include_path, сейчас в global.php добавил такие строчки:

$include_path 
".;g:/www/GLOBALS/";
//$include_path =".:/virt/homes/mysitename/htdocs/GLOBALS/";
//$include_path = ".:/var/htdocs/mysitename/GLOBALS/";
ini_set("include_path"$include_path);

Но как по мне, способ довольно кривой, вот я и хочу узнать нормальный.
Кстати, у меня по дефолту include_path = ".", а у хостинга include_path = "";
Подскажите нормальное решение, если оно существует.

=================================

Уже после того, как я это дописал (ещё в оффлайне), проверил на хостинге ещё пару фич:
-Установка include_path через .htaccess (php_value include_path ".:/var/htdocs/mysitename/GLOBALS/")не работает (никаких ошибок, но и никакого эффекта). Не знаю, в чем причина. Скорее всего в хостинге, потому что на локальном сервере работает отлично.
-Если рядом с index.php создать файл phpinfo.php (с понятным содержанием :)), то видно, что как-бы в директории / (в корне) include_path=".:/usr/local/lib/php", а в директории GLOBALS - include_path="". При этом никаких других файлов .htaccess, переназначающих инклюд_паз, замечено не было.
Ну не чудеса?

15
PHP / Кодирование данных
« : 04 Февраля 2003, 00:41:08 »
Сразу оговорюсь, что под данными я понимаю содержимое файлов или обычных строк.
Нужно закодировать данные с определенным ключем, чтобы потом с этим же ключем их можно было раскодировать.
Перерыл все доки, crc32, md5, crypt и т.д., но ведь это только для вычисление хэшей, а мне нужно, чтобы потом раскодировать можно было.
Почему-то я уверен, что где-то была стандартная функция для этих целей, но найти её сейчас, когда она понадобилась, никак не могу.
Подскажете что-нибудь? :rolleyes:

Страницы: [1] 2