PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 9
Nechtus Отправлено: 07 Января, 2018 - 20:18:12 • Тема: Помогите доработать скрипт • Форум: Если скрипт не работает

Ответов: 3
Просмотров: 1766
После двух дней мозгового штурма, я наконец нашёл решение))
Как я и думал оно оказалось очень миниатюрное и изящное))
Я написал свой wordwrap.

Вот функция, может кому понадобиться Радость

PHP:
скопировать код в буфер обмена
  1.  
  2. function htmlwrap($str, $maxLength, $char='|'){
  3.     $count = 0;
  4.     preg_match_all('#<([a-z]+)[^/>]*(?:/>|>(?:.+</\1>))#Uis',$str,$array); // Разбивает текст на куски от тега, до тега. И каждый кусок сохраняется в массив отдельным элементом. Так же создаётся массив с DOM. Регулярное выражение нашёл на просторах инета. Поэтому и не спрашивайте о нём.  
  5.     $count = count($array[0]); //Подсчёт элементов подмассива [0]
  6.     unset($array[1]);// Удаление подмассива [1] ( сюда выносится DOM, но например мне она не нужна)
  7.     $lenstr = strlen($str);//Длина текста
  8.     foreach($array as $val)//Выводим в цикле элементы массива [0]
  9.     {
  10.         for($i=0; $i<=$count; $i++)//перебираем по очереди
  11.         {
  12.             $text.=$val[$i];//составляем воедино.
  13.             $lentext = strlen($text);//длина полученного текста
  14.             $lennewtext = strlen($newText);//длина итогового текста
  15.             $ostatok = $lenstr - $lennewtext; // определяем сколько осталось символов до конца основного текста
  16.             if($lentext >= $maxLength)//условие: Длина собираемого текста должна быть больше или равна допустимому кол-ву символов
  17.             {
  18.                 $newText.= $text.$char; // Итоговый текст + разделитель, по которому будет резаться текст и создаваться пагинация
  19.                 $lentext = 0;
  20.                 $text = '';
  21.             }
  22.             if($ostatok < $maxLength)//условие: остаток меньше допустимого количества символов
  23.             {
  24.                 $newText.= $text; //дописываем последний кусок к уже готовому тексту, но только без последнего разделителя, т.к. он лишний.
  25.                 $lentext = 0;
  26.                 $text = '';
  27.             }
  28.         }
  29.     }
  30.     return $newText; //возвращаем готовый текст
  31.    
  32. }
  33.  


Ну и остаётся только подключить функцию к пагинации(см.выше) и вуаля. Про разрыв абзацев или обрыве на полуслове или полутеге можно забыть))

Специально расписал подробно, чтобы было понятно. А то на очень многих форумах и сайтах вечно швырнут кучу кода, а ты сиди пол-дня и разбирайся откуда ноги растут))
Nechtus Отправлено: 06 Января, 2018 - 18:56:08 • Тема: Помогите доработать скрипт • Форум: Если скрипт не работает

Ответов: 3
Просмотров: 1766
Строитель пишет:
Nechtus, может быть этот вариант подойдёт:

Функция:
Спойлер (Отобразить)

Использование:
Спойлер (Отобразить)


Спасибо)) Но это не совсем то. Эта функция также режет абзацы и прочие двойные теги типа span или а. Мне нужно, чтобы функция определяла, что если элемент под номером 7000 находиться между тегами <> и </>, то надо сначала дойти до символа за закрывающим тегом, а потом ставить разделитель. Эта же функция делает абсолютно такой же массив, как и у меня.
Nechtus Отправлено: 06 Января, 2018 - 02:16:04 • Тема: Помогите доработать скрипт • Форум: Если скрипт не работает

Ответов: 3
Просмотров: 1766
Здравствуйте, всех с Новым Годом! Вот снова решил к вам обратиться за помощью)) У меня есть код - постраничного вывода текста. Он довольно популярный на просторах сети, я его просто чуть - чуть доработал под себя. Он нормально работает, но есть одна проблема - он разрывает теги. Т.е. при делении текста на равные куски, происходит разрыв парных тегов и всё форматирование летит в тартарары. Вопрос: Можно ли сделать функцию wordwrap более умной, чтобы она при попадании между парными тегами, ставила разделитель после закрывающего тега? Может есть готовые решения или какие мысли? А то я себе уже весь мозг сломал)))
Я помню, что когда-то видел какую-то относительно не сложную проверку на разрыв парных тегов и переноса разделителя, но к сожалению не могу найти теперь тот сайт.

скрипт:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $count = mb_strlen($full_article['text'], 'UTF-8');
  4.     if($count > 6000)
  5.     {
  6.     $text = wordwrap ($full_article['text'], 7000, "|", false);
  7.     $pages = explode("|",$text);
  8.      
  9.     if(!isset($_GET["p"])||empty($_GET["p"])){$_GET["p"]=1;}
  10.     else{$p=$_GET["p"];}
  11.     // защита от ввода вместо номера страницы какой-нибудь ерунды
  12.     if(preg_match('/[^0-9]/', $p))
  13.     {die(header("Location:http://Archive"));}  
  14.    
  15.     if($_SERVER['QUERY_STRING']) //если есть параметры в запросе (адресной строке)
  16.     {
  17.         foreach($_GET as $key => $value)
  18.         {
  19.             //формируем строку параметров без номера страницы
  20.             if($key !='p') $uri.="{$key}={$value}&";
  21.         }
  22.     }  
  23.     // если кто-то вводит номер страницы больше, чем всего у нас страниц
  24.     $total=sizeof($pages);
  25.     if($p>$total){$p=$total;}
  26.     print $pages[$p-1];
  27.     #две назад
  28.    print "<div>";
  29.       if(($p-2)>0):
  30.       $ptwoleft="<span id='first_page_link'><a class='first_page_link' href='?{$uri}p=".($p-
  31.      
  32.     2)."'>".($p-2)."</a></span>  ";
  33.     else:
  34.       $ptwoleft=null;
  35.     endif;
  36.            
  37.     #одна назад
  38.    if(($p-1)>0):
  39.       $poneleft="<span id='first_page_link'><a class='first_page_link' href='?{$uri}p=".($p-
  40.      
  41.     1)."'>".($p-1)."</a></span>  ";
  42.       $ptemp=($p-1);
  43.     else:
  44.       $poneleft=null;
  45.       $ptemp=null;
  46.     endif;
  47.            
  48.     #две вперед
  49.    if(($p+2)<=$total):
  50.       $ptworight="  <span id='first_page_link'><a class='first_page_link' href='?{$uri}p=".($p
  51.      
  52.     +2)."'>".($p+2)."</a></span>";
  53.     else:
  54.       $ptworight=null;
  55.     endif;
  56.            
  57.     #одна вперед
  58.    if(($p+1)<=$total):
  59.       $poneright="  <span id='first_page_link'><a class='first_page_link' href='?{$uri}p=".($p
  60.      
  61.     +1)."'>".($p+1)."</a></span>";
  62.       $ptemp2=($p+1);
  63.     else:
  64.       $poneright=null;
  65.       $ptemp2=null;
  66.     endif;      
  67.            
  68.     # в начало
  69.    if($p!=1 && $ptemp!=1 && $ptemp!=2):
  70.       $prevp="<span id='first_page_link'><a href='?{$uri}p=1' class='first_page_link' title='В
  71.    
  72.    начало'><<</a></span> ";
  73.     else:
  74.       $prevp=null;
  75.     endif;  
  76.            
  77.     #в конец
  78.    if($p!=$total && $ptemp2!=($total-1) && $ptemp2!=$total):
  79.       $nextp=" ...  <span id='first_page_link'><a href='?{$uri}p=".$total."'".$total."'
  80.    
  81.    class='first_page_link'>$total</a></span>";
  82.     else:
  83.       $nextp=null;
  84.     endif;
  85.     echo "<br/><div class='pagination'>".$prevp.$ptwoleft.$poneleft."<span class='nav_num_active'>".$p."</span>".$poneright.$ptworight.$nextp."</div>";        
  86.     print "</div>";
  87.     }                    
  88.     else
  89.     {
  90.     echo $full_article['text'];
  91.  
Nechtus Отправлено: 08 Апреля, 2017 - 19:47:26 • Тема: Баг с формой • Форум: HTML, Дизайн & CSS

Ответов: 8
Просмотров: 1767
Всё разобрался)) Как говорится " Если гора не идет к Магомеду..." . Я решил зайти с другой стороны. Я просто подумал, что если две формы не хотят уживаться на одной странице, то значит надо оставить одну, но использовать её под несколько целей. И тут мне на помощь пришёл волшебник Javascript! И вуаля всё заработало, да ещё и страница теперь быстрей грузится, ибо на одну форму меньше))
Nechtus Отправлено: 04 Апреля, 2017 - 19:16:28 • Тема: Баг с формой • Форум: HTML, Дизайн & CSS

Ответов: 8
Просмотров: 1767
Блин если никто не может помочь, то хотя бы подскажите, как загуглить проблему...пожалуйста! Растерялся Растерялся Растерялся
Nechtus Отправлено: 03 Апреля, 2017 - 23:52:26 • Тема: Баг с формой • Форум: HTML, Дизайн & CSS

Ответов: 8
Просмотров: 1767
Строитель пишет:
Я бы с удовольствием вам помог, если бы спросили что-то в PHP )


Но мне всегда казалось, что PHP, CSS, HTML и JAVASCRIPT связаны...
Где-то косвенно, а где - то и полностью.
И если знаешь один язык, от туда вытекают и другие...
Нельзя же сайт написать только на php)))
Подмигивание Растерялся Огорчение
Nechtus Отправлено: 03 Апреля, 2017 - 23:39:00 • Тема: Баг с формой • Форум: HTML, Дизайн & CSS

Ответов: 8
Просмотров: 1767
Строитель пишет:

Когда задают вопрос, и публикуют 10 - 20 строк кода, то его ещё не лень просмотреть. Но в ста тридцати строках (в общей сумме) кода вместо кого-то разбираться, это уж итак должно быть понятно. Если вам повезёт - может кто и найдётся желающий Закатив глазки Но не стоит полагаться на одно только везение.


Но тогда зачем позиционироваться как форум помощи?О_0 Назовитесь "Клуб любителей PHP" например, ну и флудите по темкам. Так будет честнее по отношению к пользователям... А то с одной стороны 100500 тем, где помогают в решении вопросов. И зайдя по ссылке с гугла ты сразу находишь нужный ответ. И всё вроде хорошо. Но с другой стороны, когда тебе нужна помощь и ты создаешь тему, тебя просто игнорят, только потому что людям лень пробежать глазами код, ведь его много....И самое смешное, что выложишь мало, будут кричать, что они не экстрасенсы, чтобы угадывать...

PS Ну коль я, хоть ваше внимание привлёк, то может вы можете?)))
Nechtus Отправлено: 03 Апреля, 2017 - 23:19:24 • Тема: Баг с формой • Форум: HTML, Дизайн & CSS

Ответов: 8
Просмотров: 1767
Ппц, столько народу на форуме, а ответить никто не может уже месяц...вот тебе и один из лучших источников помощи в php - дизайне в интернете... такое впечатление, что здесь помогают только с простыми вопросами, а со сложными судя по всему народу лень разбираться...
Nechtus Отправлено: 03 Марта, 2017 - 19:25:27 • Тема: Баг с формой • Форум: HTML, Дизайн & CSS

Ответов: 8
Просмотров: 1767
дравствуйте, не знаю в правильный ли раздел я написал - надеюсь, что да)

Я реализую систему комментариев, и до последнего момента проблем не возникало, может код и получился слегка сумбурный и грязноватый, но всё работает, как надо. Начал реализовывать кнопки, которые появляются вместе с комментариями, покопался в инете и нашёл скрипт, который выводит при клике модальное окно. Сначало всё сделал для кнопки "ответить". А именно в самом низу сайта скрыта форма, а при клике она появляется отдельным окном и при заполнении с помощью аякса отправляется обрабатываться. Ничего сложного. Так же решил сделать с кнопкой комментировать. Добавил такую же форму вниз, прикрутил стили, и ... вторая форма в FF стала зависеть от стилей первой, хотя они нигде не пересекаются, и все теги закрыты. В хроме и edge всё работает. Далее привожу код.


1. HTML ( привожу весь див связанный с комментариями )

CODE (htmlphp):
скопировать код в буфер обмена
  1.  div class="substrate">
  2.                 <div class="view_comments">
  3.                 <?php if($_SESSION['auth']['user']):?>
  4.                 <?php if($_SESSION['com']):?>
  5.                 <h2>Комментарии</h2>
  6.                     <?php echo $_SESSION['com'];
  7.                    unset($_SESSION['com']);
  8.                    ?>
  9.                 <?php else:?>
  10.                     <p class="no_comments">К данной статье ещё нет ни одного комментария. Но вы можете его написать :)/></p>
  11.                     <div class="no_comments_img"><img  src="<?=TEMPLATE?>img/smile.png"/></div>
  12.                 <?php endif;?>
  13.                 </div>
  14.                 <div class="write_comments"><!-- Форма для написания комментария -->
  15.                     <h2>Написать комментарий</h2>
  16.                     <?php if($_SESSION['com']['error']):?>
  17.                     <div class='com_error'><? echo $_SESSION['com']['error'];
  18.                    unset($_SESSION['com']);                
  19.                    ?>
  20.                     </div>
  21.                     <?php endif;?>
  22.                     <form id="write_form" method="POST" action="#">
  23.                         <textarea cols="62.50" rows="10"  maxlength="90"  id="com_area" class="com_area" name="text"></textarea>
  24.                          <?php foreach($_SESSION['auth']['user'] as $auth):?>
  25.                          <input id="user_name" type="hidden" name="user_name" class="user_name" value="<?=$auth['name']?>" />
  26.                          <input id="bd_name" type="hidden" name="bd_name" class="bd_name" value="articles" />
  27.                          <? $note_id = abs((int)$_GET['id']);?>
  28.                          <input id="note_id" type="hidden" name="note_id" class="note_id" value="<?=$note_id?>" />
  29.                          <input id="parent_id" type="hidden" name="parent_id" class="parent_id" value="0" />
  30.                          <input class="com_answer_upload" id="com_answer_upload" type="submit" name="com_answer_upload" value="Комментировать"  />
  31.                          <?php endforeach;?>            
  32.                     </form>
  33.                     <?php else:?>
  34.                         <? echo "<div class='com_error'> Только зарегистрированные пользователи могут просматривать или писать комментарии!
  35.                        Пожалуйста, <a href='?view=reg'>регистрируйтесь</a>. Если вы авторизовались, то обновите страницу.
  36.                        </div>"; ?>
  37.                     <?php endif;?>
  38.                 </div>
  39.                 <div id="answer"><!-- Выезжающая форма ответа -->
  40.                     <span id="modal_close">X</span>
  41.                     <h2>Ответ на комментарий</h2>
  42.                         <?php if($_SESSION['com']['error']):?>
  43.                         <div class='com_error'><? echo $_SESSION['com']['error'];
  44.                        unset($_SESSION['com']);                
  45.                        ?>
  46.                         </div>
  47.                         <?php endif;?>
  48.                         <form id="answer_form" method="POST" action="#">
  49.                             <textarea cols="62.55" rows="40"  maxlength="100"  id="com_area_answer" class="com_area_answer" name="text"></textarea>
  50.                              <?php foreach($_SESSION['auth']['user'] as $auth):?>
  51.                              <input id="user_name" type="hidden" name="user_name" class="user_name" value="<?=$auth['name']?>" />
  52.                              <input id="bd_name" type="hidden" name="bd_name" class="bd_name" value="articles" />
  53.                              <? $note_id = abs((int)$_GET['id']);?>
  54.                              <input id="note_id" type="hidden" name="note_id" class="note_id" value="<?=$note_id?>" />
  55.                              <input id="com_parent_id" type="hidden" name="parent_id" class="parent_id" value="0" />
  56.                              <input class="answer_upload" id="answer_upload" type="submit" name="answer_upload" value="Ответить"  />
  57.                              <?php endforeach;?>
  58.                        </form>  
  59.                 </div>
  60.                 <div id="overlay"></div><!-- Пoдлoжкa -->
  61.                 <div id="redact_com"><!-- Такаяже форма для редактирования комментария -->
  62.                 <span id="modal_close">X</span>
  63.                      <h2>Редактировать комментарий</h2>
  64.                         <?php if($_SESSION['com']['error']):?>
  65.                         <div class='com_error'><? echo $_SESSION['com']['error'];
  66.                        unset($_SESSION['com']);                
  67.                        ?>
  68.                         </div>
  69.                         <?php endif;?>
  70.                         <form id="redact_form" method="POST" action="#">
  71.                              <textarea cols="62.50" rows="10"  id="area_redact" class="area_redact" name="text"></textarea>
  72.                              <?php foreach($_SESSION['auth']['user'] as $auth):?>
  73.                              <input id="user_name" type="hidden" name="user_name" class="user_name" value="<?=$auth['name']?>" />
  74.                              <input id="bd_name" type="hidden" name="bd_name" class="bd_name" value="articles" />
  75.                              <? $note_id = abs((int)$_GET['id']);?>
  76.                              <input id="note_id" type="hidden" name="note_id" class="note_id" value="<?=$note_id?>" />
  77.                              <input id="parent_id" type="hidden" name="parent_id" class="parent_id" value="0" />
  78.                              <input class="redact_upload" id="redact_upload" type="submit" name="redact_upload" value="Ответить"  />
  79.                              <?php endforeach;?>            
  80.                          </form>  
  81.                 </div>
  82.                 <div id="overlay"></div><!-- Пoдлoжкa -->
  83.             </div>


2. CSS стиль для формы ответа на комментарий ( Для формы редактирования применяются теже стили, только с другим id)
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. /*ответ на комментарий*/
  3. #answer {
  4. width: 515px;
  5. height: 300px; /* Рaзмеры дoлжны быть фиксирoвaны */
  6. border-radius: 5px;
  7. border: 3px #000 solid;
  8. background: #373737;
  9. position: fixed; /* чтoбы oкнo былo в видимoй зoне в любoм месте */
  10. top: 45%; /* oтступaем сверху 45%, oстaльные 5% пoдвинет скрипт */
  11. left: 50%; /* пoлoвинa экрaнa слевa */
  12. margin-top: -310px;
  13. margin-left: -180px; /* тут вся мaгия центрoвки css, oтступaем влевo и вверх минус пoлoвину ширины и высoты сooтветственнo =) */
  14. display: none; /* в oбычнoм сoстoянии oкнa не дoлжнo быть */
  15. opacity: 0; /* пoлнoстью прoзрaчнo для aнимирoвaния */
  16. z-index: 5; /* oкнo дoлжнo быть нaибoлее бoльшем слoе */
  17. padding: 20px 10px;
  18. }
  19. /* Кнoпкa зaкрыть для тех ктo в тaнке) */
  20. #answer #modal_close {
  21. width: 21px;
  22. height: 21px;
  23. position: absolute;
  24. top: 10px;
  25. right: 10px;
  26. cursor: pointer;
  27. display: block;
  28. }
  29. /* Пoдлoжкa */
  30. #overlay {
  31. z-index:3; /* пoдлoжкa дoлжнa быть выше слoев элементoв сaйтa, нo ниже слoя мoдaльнoгo oкнa */
  32. position:fixed; /* всегдa перекрывaет весь сaйт */
  33. background-color:#000; /* чернaя */
  34. opacity:0.8; /* нo немнoгo прoзрaчнa */
  35. -moz-opacity:0.8; /* фикс прозрачности для старых браузеров */
  36. filter:alpha(opacity=80);
  37. width:100%;
  38. height:100%; /* рaзмерoм вo весь экрaн */
  39. top:0; /* сверху и слевa 0, oбязaтельные свoйствa! */
  40. left:0;
  41. cursor:pointer;
  42. display:none; /* в oбычнoм сoстoянии её нет) */
  43. }
  44. .answer_upload
  45. {
  46.     width: 120px;
  47.     background: #000;
  48.    padding: 2px 5px 2px 5px;
  49.     border: 1px solid #CDCDE2;
  50.    color: #CDCDE2;
  51.    margin-top:10px;
  52.     border-radius:5px;
  53.     cursor: pointer;
  54. }
  55.  


) Итог следующий
а) Textarea в диве с id = redact_com ( форма редактирования комментария), который расположен под дивом с id = answer (форма ответа на комментариий) не отображается ( причём только в FF!!!), хотя ничего обющего я между этими формами и дивами я не вижу.
скрин

б) Но если я меняю у diva с id = answer ( форма ответа) стиль на display: block , то textarea дива с id=redact_com (форма редактирования) становится виден



в) В консоле FF есть ошибка ( Забыл сказать, что у меня прикручен TInyMCE).
CODE (htmlphp):
скопировать код в буфер обмена
  1.  TypeError: e is undefined[Подробнее]  tinymce.min.js:13:17430

Так вот эта ошибка пропадает, если textarea видна.

И повторю ещё раз в Хроме и edge - всё работает!!! Почему-то эта проблема только у FireFoxa!!!((( Прошу помогите, у меня уже руки опускаются и голова скоро отвалится от постоянного мозгового штурма(( Я просто не понимаю, как такое вобще может быть((( как два совершенно РАЗНЫХ дива, могут зависить от ОДНОГО свойства, которое прописано только для одного из них.. и причём всё это только при отображении в FF. Я даже не знаю, как правильно загуглить эту проблему, она помоему просто уникальна...

Заранее ОГРОМНОЕ спасибо!!

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB