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

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

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

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

IT-Security,

можешь ещё добавить такую вещь, чтобы в $perm всегда по умолчанию присуствовала 1, если оно не равно all?

Поддерживаю, $perm = 'all' по умолчанию, гораздо хуже чем $perm = '1', так как даже сама логика дле в том что по умолчанию только администратор имеет доступ ко всему, а здесь же наоборот по умолчанию доступ открыт всем, пока не вышел релиз думаю можно это изменить, так было бы правильнее.

p.s.

понимаю что это касатется только инстала модуля и любой програмер напишит как нужно, но если уж задано дефолтное значение то лучше чтобы оно было в той же логике что и все модули дле, а она в том что если не сказано иного то к модулю имеет доступ только админ (группа 1).

Не хотел бы чтобы у меня редакторы имели доступ к установленому модулю, а ведь так может статься, ведь часть разработчиков наверняка опустит это значение и оно примет значение "по умолчанию"....

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

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

Тут конечно нужно подумать как их структурировать, но полагаю такоая структура api будет гибче и менее ресурсоемка.

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

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

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

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

Саш, ТОЛЬКО имеющие доступ в админку смогут запустить админский модуль.

Поле allow_admin за это отвечает.

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

Ну чтож :)

8.2 вышла, а модулей на API я так и не увидел :)

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

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

Fatal error: Call to a member function query() on a non-object in /****/engine/api/api.class.php on line 359

Вот такая ошибка при подключении снипета со строкой вызывающую функцию load_table

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

Чтобы API получил глобальную поддержку необходимо в init.php вставить класс api...

include_once (ENGINE_DIR."/api/api.class.php");

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

Чтобы 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

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

Чтобы 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"]);

?>

Где тут ошибка?

Допускаю ошибка в "хаках" но не найду где, все остальное работает нормально, где нужно искать ошибку?

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

$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]

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

$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 и все работает нормально.

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

Если два модуля со строкой 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");

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

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

Есть два файла 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");

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

Разумеется, я привел тестовый код, хотя спсибо что обратили на это внимание.

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

spam,

а вот это уже проблема в API, в дистрибутив внесены изменения, замените файл engine/api/api.class.php

только теперь нужно использовать include вместо include_once, т.к. при таком подключении модов, они запускаются в изолированной среде

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

А никто не подскажет как подключаемому файлу передать дату текущей новости? Т.е. что то типа этого должно получится - {include file="mod.php?date={date}"}, но тег {date} там вероятно не работает :(

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

Здравствуйте Celsoft, IT-Security и все кто также этим занимается.

Хотелось бы с помощью апи решить проблему выборки новостей по ID новости... объяснить очевидные для всех плюсы не могу, но очевидные для меня уже определил...

Или подскажите как на данном этапе это сделать.. PHP знаю ниже среднего, но разобраться думаю смогу.

Спасибо

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

Задача (Немножко грубо, но думаю поймете):

$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

И так далее до бесконечности... помогите решить проблему плз...

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

	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
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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