Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите оптимизировать код

Сообщения:  [1-10]   [11-11] 

 
 автор: fmndkn   (04.06.2009 в 15:17)   письмо автору
 
   для: sim5   (04.06.2009 в 14:21)
 

Большого то и не составляет, но решено пока оставить выбор размера за пользователем.
В любом случае ваше мнение учтем в случае модификации ;-)

  Ответить  
 
 автор: fmndkn   (04.06.2009 в 15:14)   письмо автору
 
   для: Loki   (04.06.2009 в 14:19)
 

Обкатаем вариант. Спасибо за помощь! =)

  Ответить  
 
 автор: sim5   (04.06.2009 в 14:21)   письмо автору
 
   для: fmndkn   (04.06.2009 в 14:17)
 

Неужто это такая проблема в блоке, который принимает данные определиться с размером картинки и прочая? По моему вы сами себе проблему надумали, и ее решение у вас сейчас сложнее, чем могло бы быть.

  Ответить  
 
 автор: Loki   (04.06.2009 в 14:19)   письмо автору
 
   для: fmndkn   (04.06.2009 в 14:14)
 

В общем, я сократил до чего-то такого
<?
$str 
preg_split("[(<img[^>]*[^>]*>)]"$arResult["Post"]["textFormated"],-1,PREG_SPLIT_DELIM_CAPTURE); 
$final_text="";
foreach(
$str as $keym => $arStr)
{
    if (
preg_match('/<img\s+src="([^"]+)"\s+title="([^"]*)"\s+alt="([^"]*)"\s+width="([^"]*)"\s+height="([^"]*)">/i'$arStr$info))
    {
        
print_r($info);
        
/*Array
        (
            [0] => <img src="/blog/d97/nav_logo4.png" title="156143312" alt="" width="168"  height="119" 
            [1] => /blog/d97/nav_logo4.png  //src
            [2] => 156143312  //title
            [3] =>   //alt
            [4] => 168   //width
            [5] => 119  //height
        )*/
        
$final_text.=...// тут итоговый код на основе массива $info
    
}
    else 
$final_text.=$arStr;
}


На самом деле есть способ еще красивше - через preg_match_all, но мне почему-то кажется что этот будет работать быстрее.

  Ответить  
 
 автор: fmndkn   (04.06.2009 в 14:17)   письмо автору
 
   для: sim5   (04.06.2009 в 14:13)
 

>> Вопрос - почему нужно парсить уже готовое, а не сделать это во время добавления записи и загрузки картинок?

Тоже об этом думал, проблема в том, что при редактировании поста нужно вернуть все обратно, поскольку работа с картинками ведется в отдельном блоке. Объем работы увеличивается в два раза, и там тоже заморочки. Проще парсить только то, что выводится пользователю.

  Ответить  
 
 автор: fmndkn   (04.06.2009 в 14:14)   письмо автору
 
   для: Loki   (04.06.2009 в 14:07)
 

Последовательность всегда одинакова, разница только в наличии или отсутствии текста (например alt=" "). Отличие картинки пользователя от картинки смайла - наличие в тэге " border="0" "
Главная задача вычленить картинки пользователя, собрать все данные о ней, и произвести свою сборку картинки.

  Ответить  
 
 автор: sim5   (04.06.2009 в 14:13)   письмо автору
 
   для: fmndkn   (04.06.2009 в 13:27)
 

>Создаётся пост в блоге (текст картинки смайлы - как обычно). Ширина поля вывода поста ограничена, человек же может добавить картинку....

Вопрос - почему нужно парсить уже готовое, а не сделать это во время добавления записи и загрузки картинок?

  Ответить  
 
 автор: Loki   (04.06.2009 в 14:07)   письмо автору
 
   для: fmndkn   (04.06.2009 в 13:54)
 

В строке
<img src="/blog/d97/nav_logo4.png" title="156143312" alt="" width="168"  height="119">

Последовательность элементов всегда одинаковая? Какие-то элементы могут меняться местами или отсутствовать?

  Ответить  
 
 автор: fmndkn   (04.06.2009 в 13:54)   письмо автору
 
   для: Loki   (04.06.2009 в 13:40)
 

Да пожалуй
Текст до форматирования:

 text text text text text text text text text<br>

<img src="/blog/d97/nav_logo4.png" title="156143312" alt="" width="168"  height="119">

 text text text text text text text text text text text text

<img src="/blog/d97/nav_logo4.png" title="156143312" alt="" width="168" height="119">
<img src="/blog/d97/nav_logo4.png" title="156143312" alt="" width="168" height="119">

      
text text text text text text text text text text text text text text text text text text text text text text text text

<img src="/images/blog/smile/bl.gif" alt="" border="0"> 

text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
<br>

<img src="/images/blog/smile/aj.gif" alt="" border="0">



После работы кода:

 text text text text text text text text text<br>

<div style="margin: 5px 0pt;" align="center">
<a class="gallery" href="/blog/d97/nav_logo4.png" title="156143312">
<img alt="" src="/images/images_res.php?s=/blog/d97/nav_logo4.png&amp;w=168&amp;h=119" title="156143312">
</a></div>


 text text text text text text text text text text text text

<div style="margin: 5px 0pt;" align="center">
<a class="gallery" href="/blog/d97/nav_logo4.png" title="156143312">
<img alt="" src="/images/images_res.php?s=/blog/d97/nav_logo4.png&amp;w=168&amp;h=119" title="156143312">
</a></div>
<div style="margin: 5px 0pt;" align="center">
<a class="gallery" href="/blog/d97/nav_logo4.png" title="156143312">
<img alt="" src="/images/images_res.php?s=/blog/d97/nav_logo4.png&amp;w=168&amp;h=119" title="156143312"></a>
</div>

      
text text text text text text text text text text text text text text text text text text text text text text text text

<img src="/images/blog/smile/bl.gif" alt="" border="0"> 

text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
<br>

<img src="/images/blog/smile/aj.gif" alt="" border="0">
 


Жирным - выделен участок над которым велись изменения.
Курсивом - тот участок, который был исключен функцией из обработки, т.к. является смайлом и изменять его не нужно (в коде за это отвечает условие

   $st1 = strpos($arStr,"border");
   if($st1<=0))
   {
           ...............
   }
)

  Ответить  
 
 автор: Loki   (04.06.2009 в 13:40)   письмо автору
 
   для: fmndkn   (04.06.2009 в 13:27)
 

Может лучше привести пример исходного и финального текста? А то разбирать что делает код, думаю, лень не мне одному...

  Ответить  

Сообщения:  [1-10]   [11-11] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования