zilber 3 Опубликовано: 28 февраля 2015 Рассказать Опубликовано: 28 февраля 2015 Написал модуль, который позволяет добавлять вкладки в статические страницы. Сначала выбирается страница, на которой хотим вкладки сделать (через <select>). Ее id потом через post используется в запросе на update страницы. Затем идут 5 textarea, в каждом подключен tinymc. Над каждым - input text с запросом у пользователя названия вкладки. Заполняется желаемое количество textarea любым текстом или html-кодом - нажимается ОК и вуаля - на статической возникают аккуратные вкладки с настраиваемыми централизованно css и заполненные тем, что вводили в textarea. Все работает просто на ура. На два ура. На все косяки из-за тупости юзера проверено - все гуд. Даже модальное окошко вылезает, когда все прошло успешно. А вот дальше, собственно, пара вопросов... Вопрос интеграции в виде вкладки на странице создания статической страницы: собственно, вкладку сделал, переключение между ними тоже. нет особых проблем, просто берется из файла создания новостей пара тегов, которыми там создаются вкладки и вставляются в static.php. Все отлично работает. Но я начинаю плавать, когда нужно организовать сбор информации и пост его в базу. В DLE такой код... ммм... для меня очень сложно организованный. Гадить его всякими if/else как-то стремно... Никто не подкинет идею, как проверять где есть содержимое - в классической форме или в форме со вкладками - и оттуда информацию и пихать в базу? И вопрос по tinyMC: когда я подключаю редактор от DLE, а не со стороны (ведь хочется не левые стили в редакторе, а общие с другими страницами и модуль загрузки картинок, общий с DLE), то каждый экземпляр tinyMC становится обязательным к заполнению. Никто не подскажет, как это можно поправить? С радостью выложу сюда код модуля и поправки в файлах, если удастся закончить интеграцию. PS - вопрос безопасности скриптов PHP - для меня темный лес. И думаю моя страница - дырявое решето. Хочется решить и эту проблему, но уже явно меня сейчас тут какашками зальют на эту тему :-) Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Автор Чтобы submit'ы не пинались из разных вкладок, сделал кнопку рядом с "Создать новую страницу" - "Создать новую страницу со вкладками". На нее повесил ссылки и функции: addnew2 и dosavenew2. Заменил один textarea на свою форму из 5ти штук. Осталась проблема, что система хочет все 5 заполненных textarea - это раз. Когда заполняешь все - в тело страницы уходит только обрамляющие теги, никакой обработки формы не происходит, хотя php обработки присутствует. Хелп!Нашло озарение... Ухожу спать со своим монологом и следующими результатами: 1. Системе пофиг, сколько я заполнил вкладок. Сколько мне нужно, столько она и использует при формировании финального тела страницы. 2. Код выходит чистенький, вкладки частично работают. 3. Проблема: вторую часть вывода $template = html_entity_decode('<div class=\"tabs\">'.$namesec1.$namesec2.$namesec3.$namesec4.$namesec5.'<br />'.$sec1.$sec2.$sec3.$sec4.$sec5.'</div>'); категорически игнорирует. Режет код на '<br />[/code]. Убрал <br> - ничего не изменилось. Так узнал, что подключенный DLEшный TINYMC не передает в POST данные, передают только <input text>'ы мои. Блин... Всем спокойной ночи. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Автор Попробовал подключить к каждому tinymce textarea отдельный editor/static.php, в котором назначил каждому полю свой name и id, а в главном файле все собирается в единый $template. Ноль эмоций... Как и на форуме :-) Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 zilber, tinyMCE это JS скрипт, также через JS подключается к нужным полям страницы. Никакого использования PHP даже в принципе быть не должно. Причем здесь какие то подключения editor/static.php совершенно не понятно. Это составной файл админпанели и только скриптом DLE в админпанели и может использоваться, это не файл принадлежащий tinyMCE. Поэтому то что вы делаете в корне неверно и как следствие и не работает. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Автор zilber, tinyMCE это JS скрипт, также через JS подключается к нужным полям страницы. Никакого использования PHP даже в принципе быть не должно. Причем здесь какие то подключения editor/static.php совершенно не понятно. Это составной файл админпанели и только скриптом DLE в админпанели и может использоваться, это не файл принадлежащий tinyMCE. Поэтому то что вы делаете в корне неверно и как следствие и не работает. Не спорю - просто рассуждаю. В editor/static.php же хранятся настройки для tinymce. Изменяя настройки в нем - изменяю и редактор. Там есть такое: <div class="editor-panel"><textarea name="template" id="template" class="wysiwygeditor" style="width:98%;height:300px;">{$row['template']}</textarea></div> Я так понимаю, что это параметры подключения tinymce в страницу. Ведь в главном static.php есть строчка include (ENGINE_DIR . '/editor/static.php');[/code] И в этих параметрах фигурирует и name и id, которые я "мечтаю" изменить на свои. Поэтому я изменил их тут и попробовал. Ну попытка не пытка. Ведь вы наверняка не подскажете, как мне быть? :-) То бишь как собрать с 5 экземпляров tinymce данные с нужными мне name, чтобы потом их объединить через такую схему: [code] if( $_POST['sec1'] != '' ) {$sec1 = htmlspecialchars('<section id=\"content1\">'.$_POST['sec1'].'</section>');} else {$sec1 = '';} if( $_POST['sec2'] != '' ) {$sec2 = htmlspecialchars('<section id=\"content2\">'.$_POST['sec2'].'</section>');} else {$sec2 = '';} if( $_POST['sec3'] != '' ) {$sec3 = htmlspecialchars('<section id=\"content3\">'.$_POST['sec3'].'</section>');} else {$sec3 = '';} if( $_POST['sec4'] != '' ) {$sec4 = htmlspecialchars('<section id=\"content4\">'.$_POST['sec4'].'</section>');} else {$sec4 = '';} if( $_POST['sec5'] != '' ) {$sec5 = htmlspecialchars('<section id=\"content5\">'.$_POST['sec5'].'</section>');} else {$sec5 = '';} $template = html_entity_decode('<div class=\"tabs\">'.$namesec1.$namesec2.$namesec3.$namesec4.$namesec5.'<br />'.$sec1.$sec2.$sec3.$sec4.$sec5.'</div>');[/code] Эта схема отлично работает на любых видах текстовых полей, кроме подключенного tinymce. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Я так понимаю, что это параметры подключения tinymce в страницу. Ведь в главном static.php есть строчка Нет не правильно понимаете. Это параметры для редакторов исключительно для одной страницы в админпанели для добавления статических страниц и ни для чего более. Ни для каких других целей она использоваться не может. Это не универсальный файл для подключения редактора к чему бы то ни было. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Автор Я, собственно, хотел с сообществом поделиться, или вам функцию предложить. Меня-то все устраивает. Я позакрывал доступ к файлу отдельному, который это делает наглухо, чтобы никто мне в базу не накидал ничего. Но так удобны эти вкладки, что посчитал, что доп. функция в DLE по работе с объемами текста - не помешает. Поэтому и пишу тут, прошу о помощи )) Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Ведь вы наверняка не подскажете, как мне быть? :-) Подключать редактор как положено по документации к редактору, а не какими либо PHP файлами из DLE. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 (изменено) Автор Я так понимаю, что это параметры подключения tinymce в страницу. Ведь в главном static.php есть строчка Нет не правильно понимаете. Это параметры для редакторов исключительно для одной страницы в админпанели для добавления статических страниц и ни для чего более. Ни для каких других целей она использоваться не может. Это не универсальный файл для подключения редактора к чему бы то ни было. Ну верно. Но я могу заставить этот файл работать на меня, так как я, по сути, создаю статическую страницу. И подключал файл editor/statictabs.php,чтобы именно при создании страницы с табами возникал этот экземпляр. Я понял, что это не то. А вы подскажете в какую сторону подумать? UPDATE: ну так я подключу, не вопрос. Но как быть с формой загрузки картинок и общими стилями заголовков и прочего?Может я вам скину "наработки" (если их можно так назвать), и вы уже сами встроите? Вам-то это час работы, а удобство вкладок в статике сложно переоценить, мне кажется. Количество вариантов использования статики сильно увеличится, да и удобство вполне реальное. Я на них строю так страницу (в моем конкретном случае): О мероприятии Программа Место проведения Преподаватели Фотоотчет И человеку не нужно читать/просматривать простыню текстов и прочего, чтобы получить нужную информацию. Изменено 1 марта 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 А вы подскажете в какую сторону подумать? Сторону я вам собственно сказал. не использовать и не копировать ничего из PHP файлов DLE, а использовать собственное формирование нужного кода на JS, потому как там все параметры, имена, классы поля, все сделано для одного конкретного поля DLE, а не для каких то других дополнительных ваших полей. Может я вам скину "наработки" (если их можно так назвать), и вы уже сами встроите? Я не делаю скриптов на заказ. Поэтому ничем не могу вам помочь в данном вопросе. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Автор Я не делаю скриптов на заказ. Поэтому ничем не могу вам помочь в данном вопросе. Да я имел в виду встроить в релиз для всех остальных пользователей, а не мне исполнить :-) Ладно, понял, спасибо за наводку, пошел делать по вашему совету Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 марта 2015 Рассказать Опубликовано: 1 марта 2015 Автор Спасибо еще раз за дельный совет. Все получилось и у меня на руках полноценная игрушка. Рядом с созданием статики еще одна кнопка - создание страницы с вкладками. Ссылка addnew_tabs, функция dosavenew_tabs. Внутри 1 textarea и 4 спойлера, чтобы открывать по необходимости, а то страница длинная. 5 копий tinymce, все используют настройки DLE'шного tinymce, загрузка картинок и прочее работает корректно. Все данные собираются и обрабатываются отлично. Осталось только убрать инъекции в базу и обезопасить внедренный php-код. В этом слаб, буду начитывать, надеюсь на советы великого ODYS :-) Кому надо - пишите. В релиз видимо не попадет :-( Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 3 марта 2015 Рассказать Опубликовано: 3 марта 2015 (изменено) Автор Сделал полноценное редактирование вкладок. В списке статических страниц отмечено, какие страницы имеют вкладки. Соответственно они открываются в собственном разделе админки, если можно так сказать. Раздел представляет собой DLEшные табы, в каждом из которых редактор tinymce для работы с каждой отдельной вкладкой. Редактор общий с DLE, то есть загрузка картинок и все функции идентичны DLEшным. Хедер с именем и описанием и датой, а также футер с настройками статической - общие для всех вкладок, естественно. При загрузке содержимое каждой вкладки попадает в соответствующий редактор в табах. Бонусом себе сделал быстрое редактирование статических страниц. Если страница обычная - открывается обычное редактирование страницы. Если страница с вкладками - открывается новый раздел. Быстрое редактирование спрятано под [not-group 5], то есть видно только тем, кто допущен к редактированию сайта. Короче работает и выглядит в сто раз лучше, чем воспринимается на слух, а удобнее работать со статическими - на порядок. Равно как и выросло значение статических и сфера их применения значительно расширилась. Кунфу Панда доволен! Изменено 3 марта 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 3 марта 2015 Рассказать Опубликовано: 3 марта 2015 Кунфу Панда доволен! отлично сделано, молодец! А для скриншотов всей страницы, например в firefox есть дополнение FireShot. Оно может делать как только видимую облась, так и всю страницу, вот посмотри: http://s019.radikal.ru/i619/1503/36/3cfef07dc123.png - упрощаем себе жизнь Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 4 марта 2015 Рассказать Опубликовано: 4 марта 2015 Автор Кунфу Панда доволен! отлично сделано, молодец! А для скриншотов всей страницы, например в firefox есть дополнение FireShot. Оно может делать как только видимую облась, так и всю страницу, вот посмотри: http://s019.radikal.ru/i619/1503/36/3cfef07dc123.png - упрощаем себе жизнь Спасибо большое за похвалу и расширение для мозиллы!!! Потестирую эту историю пару дней и готов поделиться, если нужно :-) Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 4 марта 2015 Рассказать Опубликовано: 4 марта 2015 (изменено) Автор Разобрался почему при вставке мини- или средней копии страница переставала формироваться при вхождении знака [. Напузырил лишний html_entity_decode, я так понимаю при загрузке в базу текст собирался в код и знак [ вызывал панику и удалялся. Больше багов не вижу, все функции по сто раз прогнал. Изменено 4 марта 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 4 марта 2015 Рассказать Опубликовано: 4 марта 2015 (изменено) Автор DLE Все же не до конца победил я этот косяк и понимаю почему, но не понимаю как поправить... Прошу помощи советом, если есть минутка... Чтобы отредактировать содержимое страницы (вкладки), я загружаю его в &--#60;textarea&--#62; $row2 = $db-&--#62;super_query( "SELECT * FROM " . PREFIX . "_tabs where id='$id'" ); ... &--#60;textarea name="sec1" id="special"&--#62;{$row2['sec1']}<textarea&--#62; В базе запись имеет вид: &--#60;section id=\"content1\"&--#62;&--#60;p&--#62;&--#60;!--TBegin:/uploads/posts/2015-03/1425492630_bg.png|left--&--#62;&--#60;a href="/uploads/posts/2015-03/1425492630_bg.png" rel="highslide" class="highslide"&--#62;&--#60;img src="/uploads/posts/2015-03/thumbs/1425492630_bg.png" style="float:left;" alt='' title='' /&--#62;&--#60;/a&--#62;&--#60;!--TEnd--&--#62;&--#60;/p&--#62;&--#60;/section&--#62; Ну то есть все в полном порядке. Из редактора код выходит (даже если не редактировать ничего, а просто нажать Сохранить) - уже без &--#60;!--TBegin--&--#62;&--#60;!--TEnd--&--#62; и rel="highslide" class="highslide" Вот обработка формы редактирования, на примере одной вкладки if( $_POST['sec1'] != '' ) {$sec1 = $parse-&--#62;process( $_POST['sec1'] );} else {$sec1 = '';} ... $template = '&--#60;div class=\"tabs\"&--#62;'.$namesec1.$namesec2.$namesec3.$namesec4.$namesec5.'&--#60;br&--#62;'.[b]$sec1[/b].$sec2.$sec3.$sec4.$sec5.'&--#60;/div&--#62;'; Подскажите, пожалуйста, куда копать, вот тут я уже скис, уже 7 часов на это убил... UPDATE: оу... у вас тут редактор тоже прилично хулиганит... Код изгадил после редактирования записи.Сообразил - у вас редактор при посте текста анализирует на предмет наличия заведенных заранее тегов и добавляет код. Так как у меня редактор все же подключен со стороны, хоть и использует настройки DLE - этого не делает... Я прав? Вопрос риторический, все равно не ответите :-) Изменено 4 марта 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 5 марта 2015 Рассказать Опубликовано: 5 марта 2015 Из редактора код выходит (даже если не редактировать ничего, а просто нажать Сохранить) - уже без Этого текста вообще не должно быть ни в каком редакторе. Если используете BB теги, то прежде чем вставлять его назад в редактор для редактирования, текст также нужно обратно конвертировать в ББ теги. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 5 марта 2015 Рассказать Опубликовано: 5 марта 2015 Автор Из редактора код выходит (даже если не редактировать ничего, а просто нажать Сохранить) - уже без Этого текста вообще не должно быть ни в каком редакторе. Если используете BB теги, то прежде чем вставлять его назад в редактор для редактирования, текст также нужно обратно конвертировать в ББ теги. Ну я сделал по полной аналогии с обычным редактированием статики, просто добавляя где есть обработка $template обработку и $sec1 Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 094 Опубликовано: 5 марта 2015 Рассказать Опубликовано: 5 марта 2015 Ну я сделал по полной аналогии с обычным редактированием статики, просто добавляя где есть обработка $template обработку и $sec1 Значит что то сделали неправильно, потому как того что вы написали, а именно служебных тегов от BB кодов, при редактировании текста в редакторе быть не должны, в редакторе должны быть опять ББ теги а не HTML из них. Обрабатывать нужно не только после редактирования текста, но и до редактирования. Цитата Ссылка на сообщение Поделиться на других сайтах
Datagor 31 Опубликовано: 7 марта 2015 Рассказать Опубликовано: 7 марта 2015 zilber, вы бы код показали, как обещали выше, был бы более предметный разговор. Чего тут на пальцах объясняться? Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 12 марта 2015 Рассказать Опубликовано: 12 марта 2015 Автор Значит что то сделали неправильно, потому как того что вы написали, а именно служебных тегов от BB кодов, при редактировании текста в редакторе быть не должны, в редакторе должны быть опять ББ теги а не HTML из них. Обрабатывать нужно не только после редактирования текста, но и до редактирования. Приветствую! Провел детальное сравнение выполняемых операций функцией doedit, с помощью WinMerge, построчно. Можете не читать, я скорее для наглядности себе и интересующимся, на примере одной из секций (вкладок), в варианте РЕЖИМ РАБОТЫ СО СТАТИКОЙ - ВЫПОЛНЯЕМЫЕ ФУНКЦИИ. Сразу оговорюсь, $row2 - это от моего запроса, выполняющегося вместе с DLE'шным. $row2 = $db->super_query( "SELECT * FROM " . PREFIX . "_tabs where id='$id'" ); if ($row['allow_br'] == 2) { DLE: $row['template'] = htmlspecialchars( stripslashes( $row['template'] ), ENT_QUOTES, $config['charset'] ); МОЯ: $row2['sec1'] = htmlspecialchars( stripslashes( $row2['sec1'] ), ENT_QUOTES, $config['charset'] ); [/code] [code] if( $row['allow_br'] != '1' or $config['allow_static_wysiwyg'] ) { DLE: $row['template'] = $parse->decodeBBCodes( $row['template'], true, $config['allow_static_wysiwyg'] ); МОЯ: $row2['sec1'] = $parse->decodeBBCodes( $row2['sec1'], true, $config['allow_static_wysiwyg'] ); } else { DLE: $row['template'] = $parse->decodeBBCodes( $row['template'], false ); МОЯ: $row2['sec1'] = $parse->decodeBBCodes( $row2['sec1'], false ); [/code] [code] if( function_exists( "get_magic_quotes_gpc" ) && get_magic_quotes_gpc() ) DLE: $_POST['template'] = stripslashes( $_POST['template'] ); $template = trim( addslashes( $_POST['template'] ) ); МОЯ: $_POST['sec1'] = stripslashes( $_POST['sec1']); $sec1 = trim( addslashes( $_POST['sec1'] ) ); [/code] [code] if ( $config['allow_static_wysiwyg'] ) $parse->allow_code = false; DLE: $template = $parse->process( $_POST['template'] ); МОЯ: $seс1 = $parse->process( $_POST['sec1'] ); [/code] [code] if( $config['allow_static_wysiwyg'] or $allow_br != '1' ) { DLE: $template = $parse->BB_Parse( $template ); МОЯ: $sec1 = $parse->BB_Parse( $sec1 ); } else { DLE: $template = $parse->BB_Parse( $template, false ); МОЯ: $sec1 = $parse->BB_Parse( $sec1, false ); [/code] [code] DLE: $template = $db->safesql( $template ); МОЯ: $template = $db->safesql( $sec1, ... ); [/code] Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 12 марта 2015 Рассказать Опубликовано: 12 марта 2015 Автор Уже разобрался, естественно :-) Все работает отлично, тестирую дальше. Все же мечтаю рано или поздно подогнать Celsoft готовый модуль :-) Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 апреля 2015 Рассказать Опубликовано: 1 апреля 2015 (изменено) Автор Вернулся к теме... Парил вопрос, что когда открываешь редактирование вкладок - под редактуру попадал и служебные теги - можно было стереть тег section случайно и все валилось. Вопрос решен вынесение служебных тегов из текста. Теперь испортить структуру страницы со вкладками невозможно. Теперь задача перфекциониста выглядит так - при желании деление на вкладки должно быть внутри текста, то есть должна быть возможность добавить текст до и после текста с вкладками. Пример результата нынешней версии модуля можно посмотреть тут: http://sgtours.ru/online.html Изменено 1 апреля 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 1 апреля 2015 Рассказать Опубликовано: 1 апреля 2015 Автор Друзья, гляньте свежим взглядом, что не так в запросе? Пишет ошибку 1064, синтаксис. Хотя просто добавил значения before и after... До этого все отлично работало. $db->query( "INSERT INTO " . PREFIX . "_tabs (id, sec1, sec2, sec3, sec4, sec5, sec6, sec7, sec8, namesec1, namesec2, namesec3, namesec4, namesec5, namesec6, namesec7, namesec8, namesec1text, namesec2text, namesec3text, namesec4text, namesec5text, namesec6text, namesec7text, namesec8text, before, after) values ('$row', '$sec1', '$sec2', '$sec3', '$sec4', '$sec5', '$sec6', '$sec7', '$sec8', '$namesec1', '$namesec2', '$namesec3', '$namesec4', '$namesec5', '$namesec6', '$namesec7', '$namesec8', '$namesec1text', '$namesec2text', '$namesec3text', '$namesec4text', '$namesec5text', '$namesec6text', '$namesec7text', '$namesec8text', '$before', '$after')" );[/CODE] Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.