IT-Security 33 Опубликовано: 24 июля 2009 Рассказать Опубликовано: 24 июля 2009 Автор В любом случае все админские модули работают только для людей, у которых есть доступ в админку. Цитата Ссылка на сообщение Поделиться на других сайтах
newname 0 Опубликовано: 24 июля 2009 Рассказать Опубликовано: 24 июля 2009 (изменено) IT-Security, можешь ещё добавить такую вещь, чтобы в $perm всегда по умолчанию присуствовала 1, если оно не равно all? Поддерживаю, $perm = 'all' по умолчанию, гораздо хуже чем $perm = '1', так как даже сама логика дле в том что по умолчанию только администратор имеет доступ ко всему, а здесь же наоборот по умолчанию доступ открыт всем, пока не вышел релиз думаю можно это изменить, так было бы правильнее. p.s. понимаю что это касатется только инстала модуля и любой програмер напишит как нужно, но если уж задано дефолтное значение то лучше чтобы оно было в той же логике что и все модули дле, а она в том что если не сказано иного то к модулю имеет доступ только админ (группа 1). Не хотел бы чтобы у меня редакторы имели доступ к установленому модулю, а ведь так может статься, ведь часть разработчиков наверняка опустит это значение и оно примет значение "по умолчанию".... Изменено 24 июля 2009 пользователем newname Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 24 июля 2009 Рассказать Опубликовано: 24 июля 2009 Автор Принято... Цитата Ссылка на сообщение Поделиться на других сайтах
newname 0 Опубликовано: 24 июля 2009 Рассказать Опубликовано: 24 июля 2009 Еще небольшое пожелание на будущее, может стоит в дальнейшем разнести класс на несколько файлов, структурировав файлы в зависимости от задач, а в модуле вызывать тот или те файлы которые нужны, дабы не сбрасывать в память не нужные функции, api то со временем очень разрастется а память не бесконечна... Тут конечно нужно подумать как их структурировать, но полагаю такоая структура api будет гибче и менее ресурсоемка. Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 24 июля 2009 Рассказать Опубликовано: 24 июля 2009 В любом случае все админские модули работают только для людей, у которых есть доступ в админку. с новыми настройками доступа, доступ в админку имеет не только группа администраторов, а любая назначеная главным админом. Поэтому в данном случае это значимо. Т.е. у человека может быть доступ в адмнку, он может, например, редактировать новости и ещё какой-нить раздел, но не иметь возможности заходить в раздел настроек ...... ну и т.п. Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 24 июля 2009 Рассказать Опубликовано: 24 июля 2009 Автор Саш, ТОЛЬКО имеющие доступ в админку смогут запустить админский модуль. Поле allow_admin за это отвечает. Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 25 июля 2009 Рассказать Опубликовано: 25 июля 2009 IT-Security, ок, извини, может я что-то недопонял) в общем буду писать модуль, на месте разберусь детально) Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 3 августа 2009 Рассказать Опубликовано: 3 августа 2009 Автор Ну чтож 8.2 вышла, а модулей на API я так и не увидел Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 3 августа 2009 Рассказать Опубликовано: 3 августа 2009 (изменено) Ну чтож 8.2 вышла, а модулей на API я так и не увидел Не так быстро , у меня например стоит сорок с лишним сторонних модулей, сначала у себя обновление закончить нужно, а учитывая сколько у меня хаков стоит.... это будет не быстро (думаю неделю, так как еще и работать нужно...), если к тому времни никто не почешится на новые модули то выложу часть тех что переделаю под API для своего сайта Изменено 3 августа 2009 пользователем spam Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 3 августа 2009 Рассказать Опубликовано: 3 августа 2009 (изменено) Fatal error: Call to a member function query() on a non-object in /****/engine/api/api.class.php on line 359 Вот такая ошибка при подключении снипета со строкой вызывающую функцию load_table Изменено 3 августа 2009 пользователем spam Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 4 августа 2009 Рассказать Опубликовано: 4 августа 2009 Автор Чтобы API получил глобальную поддержку необходимо в init.php вставить класс api... include_once (ENGINE_DIR."/api/api.class.php"); Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 4 августа 2009 Рассказать Опубликовано: 4 августа 2009 Чтобы API получил глобальную поддержку необходимо в init.php вставить класс api... include_once (ENGINE_DIR."/api/api.class.php"); для чего? Не нужно этого, что в API нехватает, он подключит автоматически. Просто в моде куда автор выше подключает API, уже есть переопределение стандартных классов, в часности объявлено $db. Нужно читать документацию по скрипту, не зря же она написана, там четко перечислены все классы, а также четко написано: Внимание: Ваш модуль должен только читать данные из данных переменных, внесение изменений в значения переменных повлечет сбои в работе стандартных возможностей скрипта и дальнейшей его некорректной работе. http://dle-news.ru/extras/online/index.htm...es_include.html Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 4 августа 2009 Рассказать Опубликовано: 4 августа 2009 (изменено) Чтобы API получил глобальную поддержку необходимо в init.php вставить класс api... include_once (ENGINE_DIR."/api/api.class.php"); для чего? Не нужно этого, что в API нехватает, он подключит автоматически. Просто в моде куда автор выше подключает API, уже есть переопределение стандартных классов, в часности объявлено $db. Нужно читать документацию по скрипту, не зря же она написана, там четко перечислены все классы, а также четко написано: Внимание: Ваш модуль должен только читать данные из данных переменных, внесение изменений в значения переменных повлечет сбои в работе стандартных возможностей скрипта и дальнейшей его некорректной работе. http://dle-news.ru/extras/online/index.htm...es_include.html вот код модуля <?php include (ENGINE_DIR.'/api/api.class.php'); $dle_api = new DLE_API (); $row = $dle_api->load_table("prefix_post", "id", "approve='1'", false, 0, 1, "id"); echo($row["id"]); ?> Где тут ошибка? Допускаю ошибка в "хаках" но не найду где, все остальное работает нормально, где нужно искать ошибку? Изменено 4 августа 2009 пользователем spam Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 4 августа 2009 Рассказать Опубликовано: 4 августа 2009 $dle_api = new DLE_API (); Левая строчка, где написано в документации что ее нужно писать? Нигде. http://dle-news.ru/extras/online/index.html?api.html Для использования API в своем модуле вы должны его подключить строчкой: include_once ('engine/api/api.class.php'); Все точка, дальше уже используются функции API, т.е. должно быть <?php include (ENGINE_DIR.'/api/api.class.php'); $row = $dle_api->load_table("prefix_post", "id", "approve='1'", false, 0, 1, "id"); echo($row["id"]); ?>[/code] Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 4 августа 2009 Рассказать Опубликовано: 4 августа 2009 (изменено) $dle_api = new DLE_API (); Левая строчка, где написано в документации что ее нужно писать? Нигде. http://dle-news.ru/extras/online/index.html?api.html Без нее отдает Fatal error: Call to a member function load_table() on a non-object in /*****/mymod.php on line 4 Убрал вторй вызов файла АПИ (из инит файла), и все заработало. Спасибо за подсказку направления поиска ошибки. Если два модуля со строкой include (ENGINE_DIR.'/api/api.class.php'); то ругается на Call to a member function load_table() если подключения api только в одном модуле то все впорядке, в общем не знаю в чем трабл, вернл старый код без API и все работает нормально. Изменено 4 августа 2009 пользователем spam Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 4 августа 2009 Рассказать Опубликовано: 4 августа 2009 Если два модуля со строкой include (ENGINE_DIR.'/api/api.class.php'); то ругается на Call to a member function load_table() не может API ругаться из за этого, хоть десять раз подряд поставьте include ('engine/api/api.class.php'); include ('engine/api/api.class.php'); include ('engine/api/api.class.php'); $row = $dle_api->load_table("prefix_post", "id", "approve='1'", false, 0, 1, "id"); echo($row["id"]);[/code] никаких ошибок нет, потому что при последующих подключениях, код класса подключается и но не обрабатывается. API нужно лишь подключать, а не переинициализировать его, это первое, а второе опять грубое отношение к документации, там как написано подключать API? [b]include_once[/b] (ENGINE_DIR."/api/api.class.php"); Не думайте только о себе, думайте о тех кто будет пользоваться вашим модулем, такой вот мелочью вы просто необоснованно увеличиваете нагрузку на сервер пользователей. Заставляя файлы подключать тогда когда это не нужно Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 5 августа 2009 Рассказать Опубликовано: 5 августа 2009 (изменено) Есть два файла test.php и test2.php подключаем их в шаблоне main.tpl {include file="test.php"} и {include file="test2.php"} файлы заливаем в корень вот содержимое этих файлов test.php <?php if(!defined('DATALIFEENGINE')) { die("Hacking attempt!"); } include_once (ENGINE_DIR."/api/api.class.php"); $row = $dle_api->load_table("dle_post", "id", "approve='1'", false, 0, 1, "id"); echo($row["id"]); ?> test2.php <?php if(!defined('DATALIFEENGINE')) { die("Hacking attempt!"); } include_once (ENGINE_DIR."/api/api.class.php"); $row = $dle_api->load_table("dle_post", "title", "approve='1'", false, 0, 1, "id"); echo($row["title"]); ?> отдает Fatal error: Call to a member function load_table() on a non-object in Y:\home\dle\www\test2.php on line 6 Call Stack: 0,9970 136328 1. {main}() Y:\home\dle\www\index.php:0 1,7002 1051496 2. dle_template->load_template() Y:\home\dle\www\index.php:45 1,7043 1089992 3. preg_replace() Y:\home\dle\www\engine\classes\templates.class.php:77 1,7300 1383904 4. preg_replace() Y:\home\dle\www\engine\classes\templates.class.php:77 1,7300 1383904 5. dle_template->load_file() Y:\home\dle\www\engine\classes\templates.class.php(77) : regexp code:1 1,7367 1430128 6. include('Y:\home\dle\www\test2.php') Y:\home\dle\www\engine\classes\templates.class.php:130 это на денвере если подключение второго модуля убрать все впорядке Где ошибка? include_once (ENGINE_DIR."/api/api.class.php"); Не думайте только о себе, думайте о тех кто будет пользоваться вашим модулем, такой вот мелочью вы просто необоснованно увеличиваете нагрузку на сервер пользователей. Заставляя файлы подключать тогда когда это не нужно Разумеется, я привел тестовый код, хотя спсибо что обратили на это внимание. Изменено 5 августа 2009 пользователем spam Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 5 августа 2009 Рассказать Опубликовано: 5 августа 2009 spam, а вот это уже проблема в API, в дистрибутив внесены изменения, замените файл engine/api/api.class.php только теперь нужно использовать include вместо include_once, т.к. при таком подключении модов, они запускаются в изолированной среде Цитата Ссылка на сообщение Поделиться на других сайтах
TopSoft 2 Опубликовано: 5 августа 2009 Рассказать Опубликовано: 5 августа 2009 А никто не подскажет как подключаемому файлу передать дату текущей новости? Т.е. что то типа этого должно получится - {include file="mod.php?date={date}"}, но тег {date} там вероятно не работает Цитата Ссылка на сообщение Поделиться на других сайтах
ServerNC 0 Опубликовано: 7 августа 2009 Рассказать Опубликовано: 7 августа 2009 Здравствуйте Celsoft, IT-Security и все кто также этим занимается. Хотелось бы с помощью апи решить проблему выборки новостей по ID новости... объяснить очевидные для всех плюсы не могу, но очевидные для меня уже определил... Или подскажите как на данном этапе это сделать.. PHP знаю ниже среднего, но разобраться думаю смогу. Спасибо Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 14 августа 2009 Рассказать Опубликовано: 14 августа 2009 Автор Копать в сторону $dle_api->load_table. Покажите задачу - помогу. Цитата Ссылка на сообщение Поделиться на других сайтах
ServerNC 0 Опубликовано: 15 августа 2009 Рассказать Опубликовано: 15 августа 2009 (изменено) Задача (Немножко грубо, но думаю поймете): $a = $db->query("SELECT * FROM `dle_orders` WHERE `state` = 'done'"); while ( $row = $db->get_row( $a ) ) { /* Всякая служебная фигня */ $tpl->set('{order}', $news); $tpl->compile( 'content' ); } {order} должна заменяться на Title новостей с ID, который указан в $row['Order']. Формат поля - номера через запятую, бишь 5,4,3,21,56 и т.д. Как мне собственно выдернуть указанные ID уже разобрался, но при попытке сделать вложенный цикл у меня скрипт впринципе сходит с ума... Вот кусок кода, когда у меня скрипт бесился (не могу подобрать слова, чтобы объяснить) while ( $row = $db->get_row( $a ) ) { /* Всякая служебная фигня */ $list = explode( ",", $row['Order'] ); foreach ( $list as $daten ) { $fav_list[] = "'" . $daten . "'"; } $list = implode( ",", $fav_list ); $favorites = "(" . $list . ")"; $sql = $db->query("SELECT title FROM " . PREFIX . "_post where id in $favorites"); while ( $rows = $db->get_row( $sql ) ) { $news .= $rows['title']; } $tpl->set('{order}', $news); $tpl->compile( 'content' ); } До while ( $rows = $db->get_row( $sql ) ) { все работает отлично. Выборка происходит, все в шоколаде... а вот после.. когда появляется вложенный цикл он мне начинает: 1 строка: Title 1, Title 2 2 строка: Title 1, Title 2Title 1, Title 2 3 строка: Title 1, Title 2Title 1, Title 2Title 1, Title 2 4 строка: Title 1, Title 2Title 1, Title 2Title 1, Title 2Title 1, Title 2 И так далее до бесконечности... помогите решить проблему плз... Изменено 15 августа 2009 пользователем ServerNC Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 15 августа 2009 Рассказать Опубликовано: 15 августа 2009 Автор while ( $row = $db->get_row( $a ) ) { /* Всякая служебная фигня */ $list = explode( ",", $row['Order'] ); foreach ( $list as $daten ) { $fav_list[] = "'" . $daten . "'"; } $list = implode( ",", $fav_list ); $favorites = "(" . $list . ")"; $sql = $db->query("SELECT title FROM " . PREFIX . "_post where id in $favorites"); while ( $rows = $db->get_row( $sql ) ) { $news .= $rows['title']; } $tpl->set('{order}', $news); $tpl->compile( 'content' ); } Замените на: while ( $row = $db->get_row( $a ) ) { /* Всякая служебная фигня */ $list = explode( ",", $row['Order'] ); foreach ( $list as $daten ) { $fav_list[] = "'" . $daten . "'"; } $list = implode( ",", $fav_list ); $favorites = "(" . $list . ")"; $sql = $db->query("SELECT title FROM " . PREFIX . "_post where id in $favorites"); while ( $rows = $db->get_row( $sql ) ) { $news .= $rows['title']; } $tpl->set('{order}', $news); $tpl->compile( 'content' ); $news = ''; } таким образом в конце каждого цикла переменная будет обнуляться. Цитата Ссылка на сообщение Поделиться на других сайтах
ServerNC 0 Опубликовано: 16 августа 2009 Рассказать Опубликовано: 16 августа 2009 (изменено) При таком варианте кода первую итерацию скрипт прочел правильно, а во все последующие запихал значение из первого(( Изменено 16 августа 2009 пользователем ServerNC Цитата Ссылка на сообщение Поделиться на других сайтах
ServerNC 0 Опубликовано: 16 августа 2009 Рассказать Опубликовано: 16 августа 2009 оуууу.. .у меня еще и скрипт неправильно вытаскивает $a... возможно из-за этого глюк пошел... ща буду перепроверять Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.