Перейти к публикации

Пара вопросов по интеграции своего модуля в админку DLE


Рекомендованные сообщения

Написал модуль, который позволяет добавлять вкладки в статические страницы.

Сначала выбирается страница, на которой хотим вкладки сделать (через <select>).

Ее id потом через post используется в запросе на update страницы.

Затем идут 5 textarea, в каждом подключен tinymc. Над каждым - input text с запросом у пользователя названия вкладки.

Заполняется желаемое количество textarea любым текстом или html-кодом - нажимается ОК и вуаля - на статической возникают аккуратные вкладки с настраиваемыми централизованно css и заполненные тем, что вводили в textarea.

Все работает просто на ура. На два ура. На все косяки из-за тупости юзера проверено - все гуд. Даже модальное окошко вылезает, когда все прошло успешно.

А вот дальше, собственно, пара вопросов...

Вопрос интеграции в виде вкладки на странице создания статической страницы:

собственно, вкладку сделал, переключение между ними тоже. нет особых проблем, просто берется из файла создания новостей пара тегов, которыми там создаются вкладки и вставляются в static.php. Все отлично работает.

Но я начинаю плавать, когда нужно организовать сбор информации и пост его в базу. В DLE такой код... ммм... для меня очень сложно организованный. Гадить его всякими if/else как-то стремно...

Никто не подкинет идею, как проверять где есть содержимое - в классической форме или в форме со вкладками - и оттуда информацию и пихать в базу?

И вопрос по tinyMC:

когда я подключаю редактор от DLE, а не со стороны (ведь хочется не левые стили в редакторе, а общие с другими страницами и модуль загрузки картинок, общий с DLE), то каждый экземпляр tinyMC становится обязательным к заполнению.

Никто не подскажет, как это можно поправить?

С радостью выложу сюда код модуля и поправки в файлах, если удастся закончить интеграцию.

PS - вопрос безопасности скриптов PHP - для меня темный лес. И думаю моя страница - дырявое решето. Хочется решить и эту проблему, но уже явно меня сейчас тут какашками зальют на эту тему :-)

Ссылка на сообщение
Поделиться на других сайтах

Чтобы 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>'ы мои.

Блин...

Всем спокойной ночи.

Ссылка на сообщение
Поделиться на других сайтах

Попробовал подключить к каждому tinymce textarea отдельный editor/static.php, в котором назначил каждому полю свой name и id, а в главном файле все собирается в единый $template.

Ноль эмоций...

Как и на форуме :-)

Ссылка на сообщение
Поделиться на других сайтах

zilber,

tinyMCE это JS скрипт, также через JS подключается к нужным полям страницы. Никакого использования PHP даже в принципе быть не должно. Причем здесь какие то подключения editor/static.php совершенно не понятно. Это составной файл админпанели и только скриптом DLE в админпанели и может использоваться, это не файл принадлежащий tinyMCE. Поэтому то что вы делаете в корне неверно и как следствие и не работает.

Ссылка на сообщение
Поделиться на других сайтах

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.

Ссылка на сообщение
Поделиться на других сайтах

Я так понимаю, что это параметры подключения tinymce в страницу. Ведь в главном static.php есть строчка

Нет не правильно понимаете. Это параметры для редакторов исключительно для одной страницы в админпанели для добавления статических страниц и ни для чего более. Ни для каких других целей она использоваться не может. Это не универсальный файл для подключения редактора к чему бы то ни было.

Ссылка на сообщение
Поделиться на других сайтах

Я, собственно, хотел с сообществом поделиться, или вам функцию предложить.

Меня-то все устраивает. Я позакрывал доступ к файлу отдельному, который это делает наглухо, чтобы никто мне в базу не накидал ничего.

Но так удобны эти вкладки, что посчитал, что доп. функция в DLE по работе с объемами текста - не помешает.

Поэтому и пишу тут, прошу о помощи ))

Ссылка на сообщение
Поделиться на других сайтах

Ведь вы наверняка не подскажете, как мне быть? :-)

Подключать редактор как положено по документации к редактору, а не какими либо PHP файлами из DLE.

Ссылка на сообщение
Поделиться на других сайтах

Я так понимаю, что это параметры подключения tinymce в страницу. Ведь в главном static.php есть строчка

Нет не правильно понимаете. Это параметры для редакторов исключительно для одной страницы в админпанели для добавления статических страниц и ни для чего более. Ни для каких других целей она использоваться не может. Это не универсальный файл для подключения редактора к чему бы то ни было.

Ну верно. Но я могу заставить этот файл работать на меня, так как я, по сути, создаю статическую страницу. И подключал файл editor/statictabs.php,чтобы именно при создании страницы с табами возникал этот экземпляр.

Я понял, что это не то. А вы подскажете в какую сторону подумать?

UPDATE: ну так я подключу, не вопрос. Но как быть с формой загрузки картинок и общими стилями заголовков и прочего?

Может я вам скину "наработки" (если их можно так назвать), и вы уже сами встроите? Вам-то это час работы, а удобство вкладок в статике сложно переоценить, мне кажется. Количество вариантов использования статики сильно увеличится, да и удобство вполне реальное.

Я на них строю так страницу (в моем конкретном случае):

О мероприятии

Программа

Место проведения

Преподаватели

Фотоотчет

И человеку не нужно читать/просматривать простыню текстов и прочего, чтобы получить нужную информацию.

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах

А вы подскажете в какую сторону подумать?

Сторону я вам собственно сказал. не использовать и не копировать ничего из PHP файлов DLE, а использовать собственное формирование нужного кода на JS, потому как там все параметры, имена, классы поля, все сделано для одного конкретного поля DLE, а не для каких то других дополнительных ваших полей.

Может я вам скину "наработки" (если их можно так назвать), и вы уже сами встроите?

Я не делаю скриптов на заказ. Поэтому ничем не могу вам помочь в данном вопросе.

Ссылка на сообщение
Поделиться на других сайтах

Я не делаю скриптов на заказ. Поэтому ничем не могу вам помочь в данном вопросе.

Да я имел в виду встроить в релиз для всех остальных пользователей, а не мне исполнить :-)

Ладно, понял, спасибо за наводку, пошел делать по вашему совету

Ссылка на сообщение
Поделиться на других сайтах

Спасибо еще раз за дельный совет. Все получилось и у меня на руках полноценная игрушка.

Рядом с созданием статики еще одна кнопка - создание страницы с вкладками.

Ссылка addnew_tabs, функция dosavenew_tabs.

Внутри 1 textarea и 4 спойлера, чтобы открывать по необходимости, а то страница длинная.

5 копий tinymce, все используют настройки DLE'шного tinymce, загрузка картинок и прочее работает корректно.

Все данные собираются и обрабатываются отлично.

Осталось только убрать инъекции в базу и обезопасить внедренный php-код. В этом слаб, буду начитывать, надеюсь на советы великого ODYS :-)

Кому надо - пишите. В релиз видимо не попадет :-(

Ссылка на сообщение
Поделиться на других сайтах

Сделал полноценное редактирование вкладок.

В списке статических страниц отмечено, какие страницы имеют вкладки.

Соответственно они открываются в собственном разделе админки, если можно так сказать.

Раздел представляет собой DLEшные табы, в каждом из которых редактор tinymce для работы с каждой отдельной вкладкой. Редактор общий с DLE, то есть загрузка картинок и все функции идентичны DLEшным.

Хедер с именем и описанием и датой, а также футер с настройками статической - общие для всех вкладок, естественно.

При загрузке содержимое каждой вкладки попадает в соответствующий редактор в табах.

Бонусом себе сделал быстрое редактирование статических страниц. Если страница обычная - открывается обычное редактирование страницы. Если страница с вкладками - открывается новый раздел. Быстрое редактирование спрятано под [not-group 5], то есть видно только тем, кто допущен к редактированию сайта.

Короче работает и выглядит в сто раз лучше, чем воспринимается на слух, а удобнее работать со статическими - на порядок. Равно как и выросло значение статических и сфера их применения значительно расширилась.

Кунфу Панда доволен!

:ph34r:

1.jpg

2.jpg

3.jpg

4.jpg

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах

Кунфу Панда доволен!
отлично сделано, молодец!

А для скриншотов всей страницы, например в firefox есть дополнение FireShot.

Оно может делать как только видимую облась, так и всю страницу, вот посмотри: http://s019.radikal.ru/i619/1503/36/3cfef07dc123.png - упрощаем себе жизнь :)

Ссылка на сообщение
Поделиться на других сайтах

Кунфу Панда доволен!
отлично сделано, молодец!

А для скриншотов всей страницы, например в firefox есть дополнение FireShot.

Оно может делать как только видимую облась, так и всю страницу, вот посмотри: http://s019.radikal.ru/i619/1503/36/3cfef07dc123.png - упрощаем себе жизнь :)

Спасибо большое за похвалу и расширение для мозиллы!!! Потестирую эту историю пару дней и готов поделиться, если нужно :-)

Ссылка на сообщение
Поделиться на других сайтах

Разобрался почему при вставке мини- или средней копии страница переставала формироваться при вхождении знака [.

Напузырил лишний html_entity_decode, я так понимаю при загрузке в базу текст собирался в код и знак [ вызывал панику и удалялся.

Больше багов не вижу, все функции по сто раз прогнал.

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах

DLE

Все же не до конца победил я этот косяк и понимаю почему, но не понимаю как поправить... Прошу помощи советом, если есть минутка...

Чтобы отредактировать содержимое страницы (вкладки), я загружаю его в &amp;--#60;textarea&amp;--#62;


$row2 = $db-&amp;--#62;super_query( "SELECT * FROM " . PREFIX . "_tabs where id='$id'" );

...

&amp;--#60;textarea name="sec1" id="special"&amp;--#62;{$row2['sec1']}<textarea&amp;--#62;

В базе запись имеет вид:

&amp;--#60;section id=\"content1\"&amp;--#62;&amp;--#60;p&amp;--#62;&amp;--#60;!--TBegin:/uploads/posts/2015-03/1425492630_bg.png|left--&amp;--#62;&amp;--#60;a href="/uploads/posts/2015-03/1425492630_bg.png" rel="highslide" class="highslide"&amp;--#62;&amp;--#60;img src="/uploads/posts/2015-03/thumbs/1425492630_bg.png" style="float:left;" alt='' title=''  /&amp;--#62;&amp;--#60;/a&amp;--#62;&amp;--#60;!--TEnd--&amp;--#62;&amp;--#60;/p&amp;--#62;&amp;--#60;/section&amp;--#62;
Ну то есть все в полном порядке. Из редактора код выходит (даже если не редактировать ничего, а просто нажать Сохранить) - уже без
&amp;--#60;!--TBegin--&amp;--#62;&amp;--#60;!--TEnd--&amp;--#62;
и
rel="highslide" class="highslide"
Вот обработка формы редактирования, на примере одной вкладки

if( $_POST['sec1'] != '' )

{$sec1 = $parse-&amp;--#62;process( $_POST['sec1'] );}

else {$sec1 = '';}

...

$template = '&amp;--#60;div class=\"tabs\"&amp;--#62;'.$namesec1.$namesec2.$namesec3.$namesec4.$namesec5.'&amp;--#60;br&amp;--#62;'.[b]$sec1[/b].$sec2.$sec3.$sec4.$sec5.'&amp;--#60;/div&amp;--#62;';

Подскажите, пожалуйста, куда копать, вот тут я уже скис, уже 7 часов на это убил...

UPDATE: оу... у вас тут редактор тоже прилично хулиганит... Код изгадил после редактирования записи.

Сообразил - у вас редактор при посте текста анализирует на предмет наличия заведенных заранее тегов и добавляет код.

Так как у меня редактор все же подключен со стороны, хоть и использует настройки DLE - этого не делает...

Я прав? Вопрос риторический, все равно не ответите :-)

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах

Из редактора код выходит (даже если не редактировать ничего, а просто нажать Сохранить) - уже без

Этого текста вообще не должно быть ни в каком редакторе. Если используете BB теги, то прежде чем вставлять его назад в редактор для редактирования, текст также нужно обратно конвертировать в ББ теги.

Ссылка на сообщение
Поделиться на других сайтах

Из редактора код выходит (даже если не редактировать ничего, а просто нажать Сохранить) - уже без

Этого текста вообще не должно быть ни в каком редакторе. Если используете BB теги, то прежде чем вставлять его назад в редактор для редактирования, текст также нужно обратно конвертировать в ББ теги.

Ну я сделал по полной аналогии с обычным редактированием статики, просто добавляя где есть обработка $template обработку и $sec1

Ссылка на сообщение
Поделиться на других сайтах

Ну я сделал по полной аналогии с обычным редактированием статики, просто добавляя где есть обработка $template обработку и $sec1

Значит что то сделали неправильно, потому как того что вы написали, а именно служебных тегов от BB кодов, при редактировании текста в редакторе быть не должны, в редакторе должны быть опять ББ теги а не HTML из них. Обрабатывать нужно не только после редактирования текста, но и до редактирования.

Ссылка на сообщение
Поделиться на других сайтах

zilber, вы бы код показали, как обещали выше, был бы более предметный разговор.

Чего тут на пальцах объясняться?

:)

Ссылка на сообщение
Поделиться на других сайтах

Значит что то сделали неправильно, потому как того что вы написали, а именно служебных тегов от 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]

Ссылка на сообщение
Поделиться на других сайтах

Уже разобрался, естественно :-)

Все работает отлично, тестирую дальше.

Все же мечтаю рано или поздно подогнать Celsoft готовый модуль :-)

Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...

Вернулся к теме...

Парил вопрос, что когда открываешь редактирование вкладок - под редактуру попадал и служебные теги - можно было стереть тег section случайно и все валилось.

Вопрос решен вынесение служебных тегов из текста. Теперь испортить структуру страницы со вкладками невозможно.

Теперь задача перфекциониста выглядит так - при желании деление на вкладки должно быть внутри текста, то есть должна быть возможность добавить текст до и после текста с вкладками.

Пример результата нынешней версии модуля можно посмотреть тут: http://sgtours.ru/online.html

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах

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

Пишет ошибку 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]

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...