|
|
|
| Возникла проблема. Сделал бб коды на сайте, в том числе спойлеры.
Юзер набивает сообщение и замещает коды, вместе с кодами сообщение пишется в базу данных, в при выводе регулярное выражение обрабатывает его.
Вот собственно обработка спойлера:
$replacment = "<div id=\"sp_open_$spoiler\" style=\"display:block\"><a href=\"javascript:open_close($spoiler)\">Показать спойлер</a></div>";
$replacment .= "<div id=\"sp_close_$spoiler\" style=\"display:none\"><a href=\"javascript:open_close($spoiler)\">Скрыть спойлер</a></div>";
$replacment .= "<div id=\"sp_$spoiler\" class=\"spoiler\" style=\"display:none\">";
$spoiler = $spoiler +1;
$text = preg_replace($patern, $replacment, $text);
|
Проблема в том, что если в сообщении будет два или более спойлера или они будут вложены у них будет одинаковый идентификатор. В этом-то и проблема. Я уже два дня голову муштрую, приходят либо через чур глобальные идеи с созданием таблицы с идентификаторами спойлеров (ИМХО бред), либо вообще сделать по другому (например блок, при наведении на который будет меняться цвет, который до этого совпадал с цветом фона. При этом в качестве id можно будет использовать this
Короче спасайте человека! | |
|
|
|
|
|
|
|
для: devil943
(04.01.2008 в 01:16)
| | Что такое спойлер?
А то у меня над задней дверью висит одноименная конструкция (и сильно облегчает жизнь, кстати), но вот каким боком она к web-программированию, я не въезжаю однозначно. | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2008 в 09:48)
| | Обычно спойлер — выдвижная или фиксированная металлическая пластинка, устанавливаемая поперёк потока воздуха для улучшения устойчивости автомобиля. А еще в авиации (вроде бы) спойлеры — тормозные щитки на закрылках. А если по переводу — портить, баловать..., то полная лажа получается. :) | |
|
|
|
|
|
|
|
для: sim5
(04.01.2008 в 09:58)
| | В кино, компьютерных играх, литературе спойлер — преждевременно раскрытая важная информация, которая портит впечатление от игры/книги/фильма и разрушает их интригу; реже — лицо, которое эту информацию преждевременно раскрыло. Классический пример спойлера, вошедший в анекдоты — имя убийцы в детективе («убийца — садовник»).
http://ru.wikipedia.org/wiki/Спойлер | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2008 в 09:48)
| | Народ :) Харе флудить. Лучше помогите мне. Да, спойлер в данном случае никаким боком не относится к машинам, задним дверям и тд.
Вот тут пример:
http://o-rpg.com/forum/index.php?type=forum&id_forum=2&id_theme=3 | |
|
|
|
|
|
|
|
для: devil943
(04.01.2008 в 14:04)
| | Наверное в цитатах имеет смысл вставлять не сообщение целиком, а лишь текстовую его часть.
Если хочется цитировать контент целиком, придется формировать длинные путевые идентификаторы
$spoil_id = $parent_parent_msg_id.$parent_msg_id.$this_msg_id | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2008 в 15:45)
| | Спойлер это не цитата.
Суть в том, что id ИМХо все равно окажется таким же... | |
|
|
|
|
|
|
|
для: devil943
(04.01.2008 в 17:21)
| | Идентификатор сущности является уникальным в своем пространстве по определению.
Так что никаких таких же быть не должно.
Добавляя несколько спойлеров к тексту реплики их идентификаторы можно формировать как msgid-spoilSeqNo
Знаете, я подожду, пока Вы определите, что такое спойлер.
А то получается разговор ни о чем. | |
|
|
|
|
|
|
|
для: devil943
(04.01.2008 в 14:04)
| | У вас проблема в JS коде, мне кажется. Даже если у вас и будут разные id слои иметь, то проблема скорее всего останется, можете просто "ручником" создать несколько вложенных слоев с разными id, и на отдельной HTML страничке проверить это. | |
|
|
|
|
|
|
|
для: sim5
(04.01.2008 в 18:00)
| | Вот код js
function open_close(id) {
var sp = document.getElementById('sp_'+id);
var sp_close = document.getElementById('sp_close_'+id);
var sp_open = document.getElementById('sp_open_'+id);
if (!sp) return false;
if (!sp_close) return false;
if (!sp_open) return false;
sp.style.display = (sp.style.display=="block") ? "none" : "block";
sp_close.style.display = (sp_close.style.display=="block") ? "none" : "block";
sp_open.style.display = (sp_open.style.display=="none") ? "block" : "none";
}
|
| |
|
|
|
|
|
|
|
для: sim5
(04.01.2008 в 18:00)
| | Вот пример того, что должн получиться:
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
</div><div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">
<div id="sp_open_2" style="display:block">
<a href="javascript:open_close(2)">Показать спойлер</a></div><div id="sp_close_2" style="display:none">
<a href="javascript:open_close(2)">Скрыть спойлер</a></div><div id="sp_2" class="spoiler" style="display:none">открой дальше</div></div></div></div></div></div></div></div></div></div></div>
</div></div></div></div></div></div></div>
|
Как вы видите везде одинаковый id
Вот код js
function open_close(id) {
var sp = document.getElementById('sp_'+id);
var sp_close = document.getElementById('sp_close_'+id);
var sp_open = document.getElementById('sp_open_'+id);
if (!sp) return false;
if (!sp_close) return false;
if (!sp_open) return false;
sp.style.display = (sp.style.display=="block") ? "none" : "block";
sp_close.style.display = (sp_close.style.display=="block") ? "none" : "block";
sp_open.style.display = (sp_open.style.display=="none") ? "block" : "none";
}
|
| |
|
|
|
|
|
|
|
для: devil943
(04.01.2008 в 22:52)
| | Откуда переменная $spoiler берет свое значение, Вы так и не указали.
А ведь это и есть id | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2008 в 01:17)
| | Он указывается в index.php прямо перед инклудом фалйика, котрый собвственно и заменяет bb коды на html | |
|
|
|
|
|
|
|
для: devil943
(04.01.2008 в 22:52)
| | Про одинаковый ID вам сказали уже. А вы пробовали просто руками прописать эти всем слоям (те что вы привели выше) разный ID, и поместив это на отдельную страницу вместе с JS кодом, пощелкать свои "спойлеры"? | |
|
|
|
|
|
|
|
для: sim5
(05.01.2008 в 03:26)
| | Просто руками? Я не понимаю. Приходит пользователь и пишет сообщение, после чего я лезу в базу данных и ставлю idшник? Бред...
Я думал на тем, что бы стразу ставить id? Когда юзер ставит спойлер, но что мешает ему поменять id?... Мало ли какое заполдо могут устроить? | |
|
|
|
|
|
|
|
для: devil943
(05.01.2008 в 14:15)
| | Это не для пользователя, а для вас. Пропишите несколько слоев (так как вам надо) с нужными ID и проверьте свое творение - сомневаюсь что даже в этом случае оно у вас будет работать. | |
|
|
|
|
|
|
|
для: sim5
(05.01.2008 в 14:28)
| | А, вы про это. Я пробовал, все раюботает, даже ошибок не выдает ) что с моим знанием js странно | |
|
|
|
|
|
|
|
для: devil943
(05.01.2008 в 14:46)
| | Ну тогда в цикле (или что у вас формирует id) правильно передайте номер в идентификаторы. | |
|
|
|
|
|
|
|
для: sim5
(05.01.2008 в 14:55)
| | да вы понимаете в чем дело: цикл только перебирает сообщение, а в самом сообщении цикла нет, что бы id другой подставить. Имено этого решения я и жду! ( | |
|
|
|
|
|
|
|
для: devil943
(05.01.2008 в 15:01)
| | Если у вас цикл перебирает сообщения, то уже есть цикл. Что тудно "прикрутить" итерацию этого цикла к ID слоев? | |
|
|
|
|
|
|
|
для: sim5
(05.01.2008 в 15:23)
| | Так в сообщении может быть несколько спойлеров, надо чтобы каждый спойлер перебирался циклом. | |
|
|
|
|
|
|
|
для: devil943
(05.01.2008 в 19:23)
| | Вложение цыклов никто не запрещал. | |
|
|
|
|
|
|
|
для: sim5
(06.01.2008 в 00:33)
| | Но вы же видите, как обрабатываются сообщения?
Я не очень представляю себе такой скрипт..
Т.е в начале он долже находить запись вида [spoiler] и заменять ее на [spoiler id=$num]
Так? Но как организовать такой пебор? | |
|
|
|
|
|
|
|
для: devil943
(06.01.2008 в 02:14)
| | Понятия не имею как у вас должны выводиться и от куда берутся, но определить внешнюю по отношению к циклу переменную можно, а далее в цикле/циклах делайте с нею что хотите, согласно вашим замыслам, ее значение и подставляйте. | |
|
|
|
|
|
|
|
для: sim5
(06.01.2008 в 02:30)
| | Еще раз говорю: в одном сообщении может быть несколько скойлеров. | |
|
|
|
|
|
|
|
для: sim5
(06.01.2008 в 02:30)
| | Господитн хороший. я не понял, что вы имели в виду. Не могли бы вы пояснить это кодом? | |
|
|
|
|
|
|
|
для: devil943
(07.01.2008 в 12:20)
| | У Вас на странице имеются сообщения. Не одно, а несколько. А значит код сообщений строит некоторый цикл.
Далее. В каждом сообщении (по Вашим словам) может быть несколько спойлеров.
Соответственно и их код тоже образуется циклом. Поскольку Вы применяете preg_replace, то цикл может быть и неявным - внутри этой функции.
Если это действительно так, то preg_replace имеет смысл заменить на preg_replace_callback, и вынести генерацию окончательного id в callback-обработчик. | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2008 в 12:28)
| | >preg_replace_callback
Можно по-подробнее? Я такой функции не знаю и в книжке не видел. Вы не моглибы написать мини-листинг? | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2008 в 12:28)
| | А вы не могли бы сразу написать, как будет выглядеть замена с циклом? | |
|
|
|
|
|
|
|
для: devil943
(08.01.2008 в 14:11)
| | Не зная шаблона замены?
Не зная, какой вид имеет этот самый $spoiler?
preg_replace_callback() | |
|
|
|
|
|
|
|
для: devil943
(07.01.2008 в 12:20)
| | А если я "господин плохой"?))
Вы точно уверены, что ваш JS код работать будет? | |
|
|
|
|
|
|
|
для: sim5
(07.01.2008 в 12:47)
| | Ну плохой, так плохой... да, все работает прекрасно, я же кинул код, есливы не верите, проверьте. | |
|
|
|
|
|
|
|
для: devil943
(08.01.2008 в 13:19)
| | Я проверял. Я не о том, если вы чуть собъетесь во вложенности слоев, все, не будет как положено работать ваш скрипт. Слишком уж много вложений получается. Может быть хотя бы убрать половину - не делать два слоя (Скрыть/Показать) для одного и того же сообщения, а иметь один, так чтобы он Сворачивался/Разворачивался. Вам просто при проходах цикла, нужно не только верно ID вложений определить, но и сами вложения (правильно закрыть слой). | |
|
|
|
|
|
|
|
для: sim5
(08.01.2008 в 13:28)
| | Я немного переписал код замены. Теперь поиск идет до первого закрывающегося тега, то есть вложения в кодах запрещены.
$patern = "|\[spoiler\] (.*?) \[/spoiler\]|ixs";
$replacment = "<div id=\"sp_open_$spoiler\" style=\"display:block\"><a href=\"javascript:open_close($spoiler)\">Показать спойлер</a></div>";
$replacment .= "<div id=\"sp_close_$spoiler\" style=\"display:none\"><a href=\"javascript:open_close($spoiler)\">Скрыть спойлер</a></div>";
$replacment .= "<div id=\"sp_$spoiler\" class=\"spoiler\" style=\"display:none\">$1</div>";
$spoiler=$spoiler+1;
$text = preg_replace($patern, $replacment, $text);
|
| |
|
|
|
|
|
|
|
для: devil943
(08.01.2008 в 14:09)
| | во-первых где у тебя $spoiler определён?
во-вторых, вместо
надо
в третьих в регулярках вместо $spoiler пиши ".$spoiler."
так быстрее будет | |
|
|
|
|
|
|
|
для: RazoR Empire
(08.01.2008 в 16:16)
| | В общем пытаюсь что-то сделать другими методами..
$order = PREG_PATTERN_ORDER;
preg_match_all("/\[spoiler\] (.*?) \[\/spoiler\]/ixs", $text, $found, $order);
print_r($found);
for($j=0; $j<=count($found); $j++) {
$patern = "/\[spoiler\] (.*?) \[\/spoiler\]/ixs";
$replacment = "<div id=\"sp_open_$j\" style=\"display:block\"><a href=\"javascript:open_close($j)\">Показать спойлер</a></div>";
$replacment .= "<div id=\"sp_close_$j\" style=\"display:none\"><a href=\"javascript:open_close($j)\">Скрыть спойлер</a></div>";
$replacment .= "<div id=\"sp_$j\" class=\"spoiler\" style=\"display:none\">$1</div>";
$text_f[$j] = preg_replace($patern, $replacment, $found[0][$j]);
$patern = "/$found\[$j\]/";
$replacment = "$text_f[$j]";
$text = preg_replace($patern, $replacment, $text);
}
|
| |
|
|
|
|
|
|
|
для: devil943
(08.01.2008 в 17:22)
| | Все, окончательный вид...
// Spoiler
$order = PREG_PATTERN_ORDER;
preg_match_all("/\[spoiler\] (.*?) \[\/spoiler\]/ixs", $text, $found, $order);
for($j=0; $j<count($found[0]); $j++) {
$patern = "/\[spoiler\] (.*?) \[\/spoiler\]/ixs";
$id_sp = $j+$post[id_post];
$replacment = "<div id=\"sp_open_$id_sp\" style=\"display:block\"><a href=\"javascript:open_close($id_sp)\">Показать спойлер</a></div>";
$replacment .= "<div id=\"sp_close_$id_sp\" style=\"display:none\"><a href=\"javascript:open_close($id_sp)\">Скрыть спойлер</a></div>";
$replacment .= "<div id=\"sp_$id_sp\" class=\"spoiler\" style=\"display:none\">$1</div>";
$text_f[$j] = preg_replace($patern, $replacment, $found[0][$j]);
$patern = "/".$found[0][$j]."/ixs";
$replacment = "$text_f[$j]";
$text = preg_replace($patern, $replacment, $text);
}
|
Теперь вопрос в студию:
В строке
$patern = "/".$found[0][$j]."/ixs";
| $found[0][$j] может содержать символы типа [ ] . / \ и тд, которые рассматриваются как служебные символы. Как этого избежать? | |
|
|
|
|
|
|
|
для: devil943
(08.01.2008 в 18:19)
| | Мне никто не поможет? | |
|
|
|
|
|
|
|
для: devil943
(04.01.2008 в 01:16)
| | >>В строке $patern = "/".$found[0][$j]."/ixs";
>>$found[0][$j] может содержать символы типа [ ] . / \ и тд, которые
>>рассматриваются как служебные символы. Как этого избежать?
Для этого можно использовать функцию preg_quote(). Но это вряд ли спасёт....
Выражения /\[spoiler\] (.*?) \[\/spoiler\]/ не подойдут для вложенных [spoiler].
Trianon вам говорил про preg_replace_callback().. Всё гораздо проще:
<script>
function open_close(id) {
var sp = document.getElementById('sp_'+id);
var sp_close = document.getElementById('sp_close_'+id);
var sp_open = document.getElementById('sp_open_'+id);
if (!sp) return false;
if (!sp_close) return false;
if (!sp_open) return false;
sp.style.display = (sp.style.display=="block") ? "none" : "block";
sp_close.style.display = (sp_close.style.display=="block") ? "none" : "block";
sp_open.style.display = (sp_open.style.display=="none") ? "block" : "none";
}
</script>
<?php
$text = "[spoiler]1[spoiler]2[/spoiler][/spoiler]text[spoiler]3[spoiler]4[/spoiler][/spoiler]";
function repl($arr) {
static $id = 0;
$replacement =
'<div id="sp_open_'.$id.'" style="display:block"><a href="javascript:open_close('.$id.')">Показать спойлер</a></div>
<div id="sp_close_'.$id.'" style="display:none"><a href="javascript:open_close('.$id.')">Скрыть спойлер</a></div>
<div id="sp_'.$id.'" class="spoiler" style="display:none">'."\r\n";
$id++;
return $replacement;
}
$text = preg_replace_callback("#\[spoiler\]#", "repl", $text);
echo $text = str_replace("[/spoiler]", "</div>", $text);
?>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(11.01.2008 в 11:55)
| | ммм.. вы меня еще раз спасли :) Спасибо еще раз!
Единственное, что не понятно:
- функция от какого-то $arr
А вот тут, как я понимаю, мы ее вызываем:
$text = preg_replace_callback("#\[spoiler\]#", "repl", $text);
|
Но почему вызываем только repl без ($arr) ?
И еще у меня вылезает вот такая ошибка:
Fatal error: Cannot redeclare repl($arr) (previously declared in /home/host4571/www/forum/preg_replace3.inc:28) in /home/host4571/www/forum/preg_replace3.inc on line 27
|
Строка 27:
| |
|
|
|
|
|
|
|
для: devil943
(11.01.2008 в 16:22)
| | >> Но почему вызываем только repl без ($arr) ?
Такой синтаксис... В callback функцию автоматически передается массив найденных вхождений (такой же массив, что был бы получен с помощью preg_match()).
>> И еще у меня вылезает вот такая ошибка...
Говорит, что уже есть функция с таким именем. Только почему-то она на следующей строке объявлена. Странно... Попробуйте обозвать по-другому функцию или используйте create_function() на примере http://php.net/preg_replace_callback | |
|
|
|
|
|
|
|
для: kasmanaft
(11.01.2008 в 18:27)
| | Я переименовал, но происходит также фигня. Файл вызывается include может из-за этого?
Потом в этом примере переменеая, от которой работает функция что-то в себе несет, а тут она не имеет значения (тоже убрал).
А create_function() - используется если она ничего не делает, как я понял. | |
|
|
|
|
|
|
|
для: devil943
(11.01.2008 в 19:15)
| | > Я переименовал, но происходит также фигня
Поищите поиском по всем файлам "repl"... Или может быть сервер перегрузить попробовать? глюк мож какой..
> Потом в этом примере переменеая, от которой работает функция что-то в себе несет, а тут она не имеет значения (тоже убрал).
Не понял %)
> А create_function() - используется если она ничего не делает, как я понял.
Кто ничего не делает? :) Она используется, если callback функция нигде больше не используется... Потому что функцию, созданную с помощью create_function() больше нигде использовать не получится.
Попробуйте вот так:
$func = 'static $id = 0;
$replacement = \'<div id="sp_open_\'.$id.\'" style="display:block"><a href="javascript:open_close(\'.$id.\')">Показать спойлер</a></div>
<div id="sp_close_\'.$id.\'" style="display:none"><a href="javascript:open_close(\'.$id.\')">Скрыть спойлер</a></div>
<div id="sp_\'.$id.\'" class="spoiler" style="display:none">\'."\r\n";
$id++;
return $replacement;';
$text = preg_replace_callback("#\[spoiler\]#", create_function('$arr', $func), $text);
echo $text = str_replace("[/spoiler]", "</div>", $text);
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(11.01.2008 в 19:55)
| | так, тперь ошибок не выдает. Но для каждого поста идентификаторы одинаковы. То есть пост №1, в нем 2 спойлера, тогда у первого будет идентификатор 0, а дял второго - 1
В посте №2 отсчет идентификаторов начинается снова с нуля.
Поэтому я решил сделать, что бы идентификатор начинался не с нуля, а с id поста (у меня это $post[id_post] в цикле).
я написал
$func = 'static $id = $post[id_post];
После чего полетели ошибки
Parse error: syntax error, unexpected T_VARIABLE in /home/host4571/www/forum/preg_replace3.inc(35) : runtime-created function on line 1
Warning: preg_replace_callback() requires argument 2, '', to be a valid callback in /home/host4571/www/forum/preg_replace3.inc on line 35
я решил вывести $post[id_post], что бы проверить, может он NULL? Вывел его перед начало присваивания $func
echo $post[id_post];
Все прекрасно вывелось, но ошибка сохраницась. | |
|
|
|
|
|
|
|
для: devil943
(11.01.2008 в 20:12)
| | $post[id_post] "не видно" из созданной функции...
Сделайте вот так: 'static $id = '.$post["id_post"].';
PS я говорил, "созданную с помощью create_function() больше нигде использовать не получится" - вообще-то получится, если какой-нибудь переменной присвоить значение, возвращаемое create_function(). Но в таком случае функцию лучше описать как обычно. | |
|
|
|
|
|
|
|
для: kasmanaft
(11.01.2008 в 20:21)
| | Готово! Да уже, сделать этот id уникальныйм оказалось не просто :)
О как: $modif_id = $post["id_post"]*$post[user_num] + $num_post;
Вроде пока уникальность сохранилась :) | |
|
|
|