Вы не зашли.
#1.
Nu3oN
Off
(11)
Moderator
2011.11.18 17:05
Думаю стоящий сабж для того что бы его выделить!
В общем задает вопрос по интересующей "проблеме" и получаем ответ!
Я буду лучше голоден, но между креслом и рулем и на дороге.
#2.
Nu3oN
Off
(11)
Moderator
2011.11.18 18:06
В общем на зендовском фрейме (не знаю как на других я кроме зенда и CI ничего углубленно не юзал) есть такая фича:
Вот у нас есть контроллер и нам необходимо для определенной странички указать заголовок сайта (<title></title>)
Точных названий переменных не помню, но суть в том, что в контроллере можно указать заголовок таким образом:
Код:
span style="color: #0000BB"><?phpclass IndexController extends Zend_Controller_Action{ function indexAction() { $this -> view -> title = 'Главная страница'; }}?> |
хочу себе организовать такую же шнягу! я вижу выход из ситуации только ob_start() и т.д
а потом просто заменять необходимые элементы!
У кого какие предложения?
З.ы только не посылайте меня лопатить зендовский фрейм, я лучше повешусь
Я буду лучше голоден, но между креслом и рулем и на дороге.
#3.
TLENS
Off
(14)
Moderator
2011.11.18 18:06
Nu3oN Я юзаю деструктор.
Вот пример:
#4.
Nu3oN
Off
(11)
Moderator
2011.11.18 18:06
TLENS написал:
Вот пример:
эммм... где??
Я буду лучше голоден, но между креслом и рулем и на дороге.
#5.
TLENS
Off
(14)
Moderator
2011.11.18 18:06
В общем пример таков в начале иницыализируется класс Тема
Далее по пути работы скрипта изменяются публичные свойства.
И в деструкторе вывожу в браузер все.
В общем думал катнуть код простой но в падло.
Вот мой файл themes.class.php аналог буферизации.
Он еще только на тестировании поэтому и говна много, ну я так понимаю тебе пример надо.
Код:
span style="color: #0000BB"><?phpclass Themes { public $title; public $nav; public $description; public $description_foot; public $content; public $desc; public $keyword; public $head; public function __construct () { global $_SET; } public function __destruct () { global $_SET, $starttime; $this->parse(); header("Content-type: text/html; charset=utf-8"); $prev = (($_SET->prev == 120) ? '<b>120x90</b>' : '<a href="?preview=120">120x90</a>'); $prev .= ' / '; $prev .= (($_SET->prev == 40) ? '<b>40x30</b>' : '<a href="?preview=40">40x30</a>'); $r = '<?xml version="1.0" encoding="utf-8"?>' . "\n" .'<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">' . "\n" .'<html>' . "\n" .' <head>' . "\n" .' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' . "\n" .' <meta name="' . $this->keyword . '" />' . "\n" .' <meta name="description" content="' .$this->desc. '" />' . "\n" .' <title>' . $this->title . '</title>' . "\n" .' <link rel="stylesheet" type="text/css" href="/themes/' . $_SET->themes . '/style.css" />' . "\n" . $this->head .' </head>' . "\n" .' <body>' . "\n" . "\n" .' <div id="title">' . "\n" .' <a href="' . $_SET->home . '">' .'<img style="position: relative;top: 5px;" src="/themes/' . $_SET->themes . '/images/logo.png" alt="" /></a>' . "\n" .' </div>' . "\n" . "\n" .' <div id="nav">' . $this->nav . '</div>' . "\n" .' <div id="description">' . $this->description . '</div>' . "\n" . "\n" .' <div id="content">' . "\n" .' Предосмотр: ' . $prev . '<br />' . "\n" . $this->content . "\n" .' </div>' . "\n" .' <div id="description-foot">' . "\n" .' ' .$this->description_foot . "\n" .' </div>' . "\n" . "\n" .' <div id="foot">' . "\n" .' <div style="text-align:center">' //.' <a href="http://fixwap.net/ru/?uid=11598"><img src="http://fixwap.net/ru/count.php?uid=11598" alt="fixwap"/></a>' . "\n" .' <a href="http://weplog.net/in/8375"><img src="http://weplog.net/8375/1.cnt" alt="wap сайты" title="wap сайты" /></a>'. "\n" .' <a href="http://waplog.net/c.shtml?352534"><img src="http://c.waplog.net/352534.cnt" alt="waplog" /></a>' . "\n" .' <a href="http://mstop.ru/?uid=860"><img src="http://mstop.ru/count.php?860" alt="mstop.ru"/></a>' . "\n" //.' <a href="http://top.sexvirus.ru/click.php?2367"><img src="http://top.sexvirus.ru/image.php?2367,small" alt="top.sexvirus.ru" /></a>' . "\n" .' <br />' . "\n" .' <a href="http://top4wap.ru/5883"><img src="http://top4wap.ru/cnt4.gif?5883" alt="TOP4WAP.ru"/></a><br />' . "\n" .' <small>' . round(microtime(1) - $starttime, 4) . ' Сек.</small> ' . "\n" .' </div>' . "\n" .' </div>' . "\n" .' </body>' . "\n" .'</html>'; //var_dump($this); //highlight_string($r); echo $r; } private function parse () { global $_SET; if (!$this->title) { if ($_SET->page[1]) { $this->title = $_SET->page[1] . ' - Лучшее порно'; } else { $this->title = 'Лучшее порно'; } } else { $this->title = $this->title . ' - Лучшее порно'; } if ($this->content == '') { $this->content = ' <b>Страница не найдена</b>'; } if (!$this->description) { $this->description = ' Все самое лучшее здесь!'; } if ($this->nav) { $this->nav = $this->navig(); } if (!$this->nav) { $this->navig(); } if (!$this->keyword) { $this->keyword = 'keywords" content="podsmotri.org, best, xxx, порно, Инцест, Домашка, руское, эротика, видео, 3gp, mp4, трах, секс, подсмотренное, лучшее'; } if (!$this->desc) { $this->desc = 'Лучшая подборка xxx, Бесплатное xxx, Домашнее xxx, Руское xxx, Скачать 3gp, Скачать mp4, Популярное xxx, Ржачное xxx, Скрытая камера'; } } private function navig () { global $_SET; $arr_top[1] = array('<a href="/' . $_SET->act . '/new/">Новые</a>', '<b>Новые</b>'); $arr_top[2] = array('<a href="/' . $_SET->act . '/search/">Поиск</a>', '<b>Поиск</b>'); $arr_top[3] = array('<a href="/' . $_SET->act . '/top_week/">Топ нед.</a>', '<b>Топ нед.</b>'); $arr_top[4] = array('<a href="/' . $_SET->act . '/top_month/">Топ мес.</a>', '<b>Топ мес.</b>'); $arr_top[5] = array('<a href="/' . $_SET->act . '/top_all/">Топ все</a>', '<b>Топ все</b>'); $c = count($arr_top); $this->nav = '<small>'; for ($i=1; $i<=$c; $i++) { $this->nav .= $arr_top[$i][(($_SET->page[0] == $i)?1:0)] . (($i<$c)? ' | ' : ''); } $this->nav .= '</small>'; $if = ($_SET->page[0] >= 1 && $_SET->page[0] <= 5); $arr_nav[1] = array('video', '<a href="/video/' . (($if)? $_SET->page[2] : 'new') . '/">Видео</a>', '<b>Видео</b>'); $arr_nav[2] = array('photo', '<a href="/photo/' . (($if)? $_SET->page[2] : 'new') . '/">Фото</a>', '<b>Фото</b>'); $i = 0; $this->description = '<small>'; while ($arr_nav[++$i][0]) { //() $this->description .= $arr_nav[$i][(($_SET->act == $arr_nav[$i][0])? 2 : 1 )] . (($arr_nav[($i + 1)][0])? ' / ' : ''); } $this->description .= '</small>'; }}?> |
#6.
Nu3oN
Off
(11)
Moderator
2011.11.18 18:06
TLENS, идея впринципе хорошая, но у меня на шаблонах все!
а так черпану онсновную идею! это примерно то что я и искал))) спасибо большое
Я буду лучше голоден, но между креслом и рулем и на дороге.
Nu3oN, я не совсем понял, как ты тогда рендеришь шаблоны, не имея всех данных?
Может я не совсем понимаю, но вариантов тут с ходу несколько имеется.
#8.
Nu3oN
Off
(11)
Moderator
2011.11.18 22:10
Я сделал по принципу TLENS'a
Код:
span style="color: #0000BB"><?php if (is_file(PATH_TEMPLATES . self :: OUTPUT_THEME . '/template.inc.php')) { require_once(PATH_TEMPLATES . self :: OUTPUT_THEME . '/template.inc.php'); Logging :: setMark('Подключение файла настроек шаблона'); } else { trigger_error('Ошибка при подключении файла настроек шаблона', E_USER_ERROR); } /* * Указываем залоговок страницы. */ if (empty($this -> arrHeader['title'])) { $arrHeader['title'] = $titles['title']; } else { $arrHeader['title'] = $this -> arrHeader['title']; } /* * Указываем ключевые слова. */ if (empty($this -> arrHeader['keywords'])) { $arrHeader['keywords'] = $titles['keywords']; } else { $arrHeader['keywords'] = $this -> arrHeader['keywords']; } /* * Указываем описание страницы. */ if (empty($this -> arrHeader['description'])) { $arrHeader['description'] = $titles['description']; } else { $arrHeader['description'] = $this -> arrHeader['description']; } /* * Указываем где мы берем стиль. */ $arrHeader['link_css'] = $titles['link_css']; /* * Указываем где мы берем иконку. */ $arrHeader['link_ico'] = $titles['link_ico']; /* * Закрываем буферизацию. */ $strOut = ob_get_contents(); ob_end_clean(); header("Content-type: text/html; charset=utf-8"); /* * Выводим основной шаблон. */ $this -> view -> assign('arrHeader', $arrHeader); $this -> view -> assign('outContent', $strOut); $this -> view -> display('/', 'primary'); die; } |
Я буду лучше голоден, но между креслом и рулем и на дороге.
#9.
Nu3oN
Off
(11)
Moderator
2011.11.18 22:10
Кстати юзав CI увидел "маркеры", и придумал велосипед, который оказался очень полезным!
полностью вижу весь процесс выполнения скрипта:
Начало ведения меток
Подключение класса "Logging"
Подключение файла "setting"
Подключение файла "common"
Старт сессии
Подключение класса "MVC_Router"
Определение категории с контроллером
Определение файла контроллера
Подключение класса "MVC_Controller"
Подключение файла контроллера
Запуск контроллера
Подключение класса "DB"
Подключение класса "DB_ClassBase"
Подключение класса "NativeTemplate"
Проверка существования категории с шаблонами
Подключение класса "GetHelpers"
Подключение хэлпера "testhelp()"
Подключение шаблона "index"
Подключение файла настроек шаблона
Передаем переменные в шаблон
Подключение шаблона "primary"
Конец ведения меток
Только в CI время пишут! там идет принцип такой:
Код:
span style="color: #0000BB"><?phpfunction name_function($var){ $this -> mark[$var] = microtime();}name_function('controller_execution_time_( '.$class.' / '.$method.' )_start'); |
а нахрена это надо я так и не нашел...
Я буду лучше голоден, но между креслом и рулем и на дороге.
возможно, для выявления ресурсоемких мест.
#11.
Sep
Off
(0)
Участник
2012.01.13 22:10
Есть число 20, как сделать 5 разных чисел, что бы они в среднем арифметическом давали 20, и по возможности регулировать уровень числа.
Например:
Дано 20
Четвертое число больше всех.
Получаем числа 16, 10, 24, 30, 20.
Как это реализовать? Заранее спасибо
Отредактировано Sep (2012.01.13 22:10)
Код:
span style="color: #0000BB"><?php$avg = 20; // среднее арифметическое$count = 5; // всего необходимо чисел$max = 30; // максимальное число$maxNumber = 4; // какое число в массиве должно быть максимальным$numbers = array();$sum = $avg * $count;for ($i = 1; $i <= $count; ++$i) { if ($i === $maxNumber) { $numbers[$i] = $max; } else if ($i === $count) { $numbers[$i] = $sum - array_sum($numbers); } else { $numbers[$i] = mt_rand($max / $count + $count, $max - $count); }}print_r($numbers);echo array_sum($numbers) / sizeof($numbers); |
спасибо за задачку, мне очень понравилась)
Добавлено спустя 51 секунду: P.S. не уверен на счет оптимальности кода, но сам алгоритм вроде работает.
#13.
Sep
Off
(0)
Участник
2012.01.14 01:01
Gemorroj, спасибо большое
#14.
Sep
Off
(0)
Участник
2012.01.15 16:04
Gemorroj, жаль что при увеличении числа $count алгоритм уже не правильно работает. Последнее число становится очень большим, разбежка от средне арифметического должна быть небольшой
Sep, ну тут условия заданы жесткие. Т.е. работоспособность алгоритма зависит от заданных первоначальных условий.
У меня такая проблема. Нужно создать страничку списка сайтов локалхоста. Шаблон я подготовил, но в скрипте не могу разобраться, как вывести субдомены в общем блоке.
Конструкция разметки должна быть примерно следующей:<div> <a>Домен1
</a> <a>Домен2
</a> <div> <a>Субдомен1.Домен2
</a> <a>Субдомен2.Домен2
</a> </div> <a>Домен3
</a></div>А на данный момент я могу вывести лишь так:<div> <a>Домен1
</a> <a>Домен2
</a> <div><a>Субдомен1.Домен2
</a></div> <div><a>Субдомен2.Домен2
</a></div> <a>Домен3
</a></div>За основу взял этот скрипт:Код:
lt;?// Original idea by: Dmitry Boykov (http://forum.dklab.ru/users/DmitryBoykov/)$file = file('/usr/local/apache/conf/vhosts.conf');foreach ($file as $line) { if (preg_match('/^[^#]* <VirtualHost \s+ [^:>]+ (?::(\d+))?/six', $line, $p)) { $port = @$p[1]; } if (preg_match('/^[^#]* ServerName \s+ "?([^"]*)"?/six', $line, $p)){ if ($port == 443) continue; $dom = preg_replace('/^www\./si', '', $p[1]); $dom .= $port && $port != 80? ":$port" : ""; $domains[$dom] = join(".", array_reverse(preg_split('/\./', $dom))); }}asort($domains);$prev = false;echo '<ul>';foreach ($domains as $dom=>$parts) { if (!$prev || !preg_match('/'.preg_quote($prev, '/').'$/si', $dom)) { echo "<li><a href=\"http://{$dom}\" target=\"_blank\"><b>{$dom}</b></a></li>"; $prev = $dom; } else { print " - <a href=\"http://{$dom}\" target=\"_blank\">{$dom}</a><br />"; }}echo '</ul>';?> |
Было бы вообще здорово, если бы домены и субдомены парсились не из апача, чтоб при запуске на Nginx, список сайтов тоже смог отобразится.
эм.. не совсем понимаю. проблема всего лишь в дивах?
и еще, вероятно, лучше будет использовать не парсер vhosts.conf, а парсить вывод apachectl -S
Да, вопрос косметического характера - вывод субдоменов в каком-либо классе (дивы для примера конструкции, мне нужен <ul>).
И чтоб скрипт мог работать на том же Денвере.
ну так собери сначала все в массив, а потом с массивом делай что хочешь.
Без понятия как это сделать.
Kак составить массив, чтоб при домене без поддоменов выводило:
<a>Домен</a>,
а при выявлении субдоменов:
<a>Домен</a>
<ul>
<a>Субдомен-1</a>
<a>Субдомен-2</a>
</ul>.
То есть, я не смогу составить такой массив, так как не понимаю основ php.
давай свой скрипт, как ты сейчас собираешь.
Вот скрипт, только я его уже не разбираю. Искал в инете похожие проблемные ситуации или готовое решение 2 дня и ни чего не добился.
Вложения
dom.zip
6kb
[
загрузок: 672]
скинь еще vhosts.conf для примера, а то у меня как ни странно под рукой не нашлось тестовой конфигурации
Вот такой список составил:
блин, вчера дома немного подправил скрипт, потом настроение пропало) сегодня вечером доделаю
надеюсь разберешься
Вложения
www.zip
6kb
[
загрузок: 756]
Я не смог разобраться.
Скрипт выдает:
Array
(
[site1.ru] => Array
(
[0] => sub1.site1.ru
[1] => sub2.site1.ru
[2] => sub3.site1.ru
)
[site2.ru] => Array
(
)
[site3.ru] => Array
(
)
[site4.ru] => Array
(
)
)
Отредактировано LEXIN (2012.05.01 00:12)
ну так там print_r и exit стоит. я думал с таким массивом ты уже разберешься как дальше работать.
Не, это я не осилил. Пытался в код echo и print вставлять, но получаю только ошибки на выводе.
#33.
Nu3oN
Off
(11)
Moderator
2012.05.17 01:01
в общем вопрос в следующем:
Пишу скрипт групп. Зациклился на решение задачи со вступлением в закрытую группу!
Вот и думаю при отсылке запроса на добавление в группу отправлять лс администратору мол такой-то, такой-то хочет вступить в группу.
Или же выискать в модераторах того кто в онлайне и отправить ему в лс запрос? если же второй вариант, то как быть если никого нет в онлайне?
И еще есть третий вариант! создать страничку в группе, мол в группу хотят добавится такие то такие. Но тут тоже есть нюанс! Модераторы могут долгое время не заходить в группу...
Я буду лучше голоден, но между креслом и рулем и на дороге.
можно совместить эти варианты. а уведомлять админа или модераторов - наверное можно сделать как настройку в группе.
Как правильно разделить несколько переменных через запятую, если неизвестно содержит ли предыдущая или следующая переменная запись?
Примеры:
Строка переменных: {1}{2}{3}{4}{5}{6}{7}
Значение есть только у {1} и {5}, или {3} и {6}, или {2}, {3} и {7} и т.д.
Можно проверить переменную на содержание записи { IF 1 = "" "yes" "no" }
Можно использовать дополнительную переменную и выводить её значение
Проставив запятые обычным образом не катит: {1},{2},{3},{4},{5},{6},{7} т.к. с заданными условия получим: , , , +, +, , например
для вывода implode используешь?
можно обработать массив через array_filter, например.
Нет, я в MS Word пытаюсь слияние организовать))
Там есть:
{SET переменная "значение"}
{= 1 + 1}
{IF "значение" = переменная "1" "2"}
{MERGEFIELD Переменная \b "before" \f "after"}
Добавлено спустя 3 минуты 33 секунды: У меня есть файл MS Exel. В нём записи запросов.
На каждый запрос нужен ответ с адресом.
Вот адрес через "," я могу огранизовать простым условием, если есть просто в конце добавить "," но последний элемент будет содержать ","
Вот в чем вся проблема
Да я уже по-другому сделал))
Лучше всего у меня получается сливать таблицу MS Exel в мой шаблон указывая тип документа "Письмо"
Этот код мне помогает собрать разбитый адрес в таблице MS Exel с разделителем "," примерно так: |город|улица|дом|квартира| => г. Город, ул. Улица, д. #, кв. #
Слияние помогает избегать рутинной работы, таких строк у меня бывает много, а значит столько же писем должно быть.
Код:
span style="color: #0000BB"><?php // MS Word// Добавить поле можно комбинацией: [Ctrl] + [F9]// Поле это { }/* Я решил через переменные сделать. Потом удобней будет искать и редактировать. Ибо в MS Word каждый раз надо добавлять поля комбинацией. Тут однотипный код, написали 1 строку с каждого блока, после копируйте все поле и можно редактировать. Можно и попроще, в 2 последних блока сделать. Можно попробовать оптимизировать, не считая кол-во записей, сразу как-то в блоке 4, но мне и так хватает :)*/// Объявление переменных{SET Счетчик 0}{SET Строка ""}{SET Элемент1 ""}{SET Элемент2 ""}{SET Элемент3 ""}{SET Элемент4 ""}// Подготовка Полей слияния. Приводим в конечный вид.{IF Элемент1 <> "" {SET Элемент1 {MERGEFIELD ПолеСлияния1 \f "добавим что-нибудь в конец строки"}}}{IF Элемент2 <> "" {SET Элемент2 {MERGEFIELD ПолеСлияния2 \b "добавим что-нибудь в начало строки"}}}{IF Элемент3 <> "" {SET Элемент3 {MERGEFIELD ПолеСлияния3}}}{IF Элемент4 <> "" {SET Элемент4 {MERGEFIELD ПолеСлияния4}}}// Другой вариант:{IF Элемент5 <> "" {SET Элемент5 {MERGEFIELD ПолеСлияния5}} {SET Элемент5 ""}}// Подсчет количества записей (т.е. не пустых записей){IF Элемент1 <> "" {SET Счетчик {=Счетчик+1}}}{IF Элемент2 <> "" {SET Счетчик {=Счетчик+1}}}{IF Элемент3 <> "" {SET Счетчик {=Счетчик+1}}}{IF Элемент4 <> "" {SET Счетчик {=Счетчик+1}}}/* Если элемент присутствует, уменьшаем счетчик для операции определения нужна ли запятая или нет.*/// Формирование переменной Строка{IF Элемент1 <> "" {SET Счетчик {=Счетчик-1}}}{IF Элемент1 <> "" {SET Строка {IF 1 <= Счетчик "{Строка}{Элемент1}, " "{Строка}{Элемент1}"}}}{IF Элемент2 <> "" {SET Счетчик {=Счетчик-1}}}{IF Элемент2 <> "" {SET Строка {IF 1 <= Счетчик "{Строка}{Элемент2}, " "{Строка}{Элемент2}"}}}{IF Элемент3 <> "" {SET Счетчик {=Счетчик-1}}}{IF Элемент3 <> "" {SET Строка {IF 1 <= Счетчик "{Строка}{Элемент3}, " "{Строка}{Элемент3}"}}}{IF Элемент4 <> "" {SET Счетчик {=Счетчик-1}}}{IF Элемент4 <> "" {SET Строка {IF 1 <= Счетчик "{Строка}{Элемент4}, " "{Строка}{Элемент4}"}}}// ------- Совсем другой "безПеременный" вариант (!!!НЕ ТЕСТИРОВАЛ!!!):{IF ПолеСлияния5 <> "" {SET Счетчик {=Счетчик+1}}}// ...{IF ПолеСлияния5 <> "" {SET Счетчик {=Счетчик-1}}}{IF ПолеСлияния5 <> "" {SET Строка {IF 1 <= Счетчик "{Строка}{ПолеСлияния5 \b "добавим в начало" \f "добавим в конец"}, " "{Строка}{ПолеСлияния5 \b "добавим в начало" \f "добавим в конец"}"}}}{Строка} // Результат |
Епт, если результат сразу распечатать, то фигня получается. А вот когда отдельно в документ сохраняешь - норм, и его распечатка тоже норм проходит.