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

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

Итак, решил использовать API на реальной задаче

ПЛЮСЫ

1. Немного меньше кода.

2. Не нужно задумываться подключены ли классы бд и загружали ли мы конфиг движка. Подключил API - оно дальше само :)Это самое главное преимущество

МИНУСЫ

1. Плохая документация. Что именно возвращают методы остаётся загадкой, если не залезть в код или не попробовать запустить.

2. Неотформатирован код

Обнаружил ошибку в версии 0.05 в строке

$condition = "category IN (" . implode ( ',', $cats ) . ")'";
а именно одинарная кавычка лишняя. Для чего нужно $dle_api->files и метод - show_cached_files() не понял, а ведь он запускается хочу я этого или нет - кушает ресурсы :) Пример использования API
require_once ROOT_DIR.'/engine/api/api.class.php';

/*

 *	ЗАБИРАЕМ НОВОСТИ СОГЛАСНО НАСТРОЕК

 */

$q = $showShort == 1 ? ', short_story' : '';

$news = $dle_api->load_from_cache('aktauInformer'.$count, 18000, 'fire');

if(!$news)

{

	$dle_api->dle_config['allow_multi_category'] = 0;

	$news = $dle_api->take_news($config['informer']['news']['cats'], 'id, title'.$q, 0, $count, 'date');

	$dle_api->save_to_cache('aktauInformer'.$count, $news);	

}

foreach($news as $row)

{

	$title = substr($row['title'], 0, $titleSize);

	if($title != $row['title']) $title.= '...';


	if($showShort == 1)

	{

		// Обрабокта анонса новости

		$row['short_story'] = strip_tags($row['short_story']);

		$shortStory = substr($row['short_story'], 0, $shortSize);

		if($shortStory != $row['short_story']) $shortStory.= '...';		

		$js .= 'aktauInformerRowExt("'.$title.'", "'.trim($shortStory).'", '.$row['id'].');'."\n";		

	}

	else

	{

		$js .= 'aktauInformerRow("'.$title.'", '.$row['id'].');'."\n";		

	}	

}

$js .= 'setTimeout(aktauInformerRender, 100)';


header('Content-Type: application/x-javascript');

print $js;

В целом неплохой инструмент :)

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

Скоро новая версия с поддержой доп. полей + автоустановкой при первом запуске API.

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

Обнаружена ещё одна ошибка, на сей раз критическая..

Функция $dle_api->take_news,

параметр $cat - категории через запятую

Если указать всего одну категорию - получим ошибку

Warning: implode(): Invalid arguments passed

Исправление

удалить

		  if (strpos($cat, ','))

			{

			  $cats = explode(',', $cat);

			}

		  else

			{

			  $cats = $cat;

			}
Сергей, если ты указал что надо категории через запятую, зачем мудрить с массивом?) далее найти
$condition = '';

		  if ($this->dle_config['allow_multi_category'] == 1)

			 {

			   $condition = "category regexp '[[:<:]](" . implode ( '|', $cats ) . ")[[:>:]]'";

			 }

		  else

			{

			  $condition = "category IN (" . implode ( ',', $cats ) . ")";

			}
и заменить на
			if ($this->dle_config['allow_multi_category'] == 1)

			{

				$condition = 'category regexp "[[:<:]]('.str_replace(',', '|', $cat).')[[:>:]]"';

			}

			else

			{

				$condition = 'category IN ('.$cat.')';

			}

Да, кстати неплохо было бы предусмотреть желание выбрать новости из категории, включая её подкатегории

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

+ автоустановкой при первом запуске API.
что это значит?

В новой версии API две таблицы для альтернативных дополнительных полей.

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

За bugreport спасибо, поправлю в релизе.

Нет желания вдвоём прогать API? :)

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

Предварительный CHANGELOG

DLE API v0.06 Beta

- Убраны $dle_api->files и функция получения листинга (Спасибо Александру Медведеву)

- Поправлена функция получения новостей (Спасибо Александру Медведеву)

- Добавлена поддержка дополнительных полей

- Мелкие правки кода

- Отформатирован код

- Написана новая документация

- Убрано изменения уровня ошибок (Спасибо Александру Медведеву)

Изменено пользователем IT-Security
Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Давно небыл на форуме.

пришел, увидел, заценил.

По поводу апи. Штука конечно интересная, но смысл в ней не особо понимаю. Основная проблема дле - установка новых модулей собственно, а не решение использования инструментов для написания модулей. ведь мало модулей, которые после изменения инструкции для установке не работают на свежих версиях.

Но в дле я бы конечно много чего по коду упростил. Самое наверно часто встречаемое в дле - это имя юзера и его вывод. Вот его замена на функцию было бы хорошо (мелочь но приятно).

По коду на первый взгляд:

зачем много такого?

$dle_api->take_user_by_id($user_id, $select_list = "*");

$dle_api->take_user_by_name($name, $select_list = "*");
не проще?
$dle_api->take_user_where($name, $where, $select_list = "*");
ведь программисты и так знают по чему искать и что. а также по поводу изменения у пользователя каких либо параметров (change_user_name etc) можно в массив запихнуть. и вот одна функция. порадовало конечно
$dle_api->send_pm_to_user
кроме этого на мыло отправлять, было бы ещё лучше. по поводу
$dle_api->load_table
зачем использовать $this->db->query если есть $this->db->super_query и с тем же $multirow. С другой стороны пихать результаты в массив, то ж не оч хорошо, ведь на это расходуется память компа, для его хранения, обычный
while ($row = $this->db->get_row()

)

более уместен в некоторых случаях.

конечно апи сырое, но думаю оно увеличит свой функционал. Основная проблема заключается в том, что туда добавлять, ведь каждый мод по своему пишется и таких функций как получение новостей, смена пароля и прочее совершенно не нужно. ИМХО.

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

в api есть функция load_table

в комменте к ней указано что она сервисная, у меня вопрос, когда дле перейдет на php5 будет ли эта функция ограничена (private)?

например можно ли её использовать вместо $db->query?

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

Кстати будет версия API под PHP5.

Насчёт того будет ли метод публик или приват я пока ещё думаю.

Возможно будет public.

Изменено пользователем IT-Security
Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

API обновлено :) Версия 0.07 совместно с Медведевым Александром.

Ааа!! Спасибо! :lol:

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

Так как завеса тайны над пресс-релизом пропала, то могу обрадовать, что в новой версии будет:

1) $dle_api->install_mod ($name, $title, $descr, $icon, $allowed, $update = false);

2) $dle_api->uninstall_mod ($name);

3) $dle_api->change_mod_permissions ($name, $new_permissions);

В случае попытки повторной установки модуля будет возвращена ошибка. Исключением является $update = true. В этом случае данные просто будут обновлены.

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

пользуясь случаем, хочу наябедничать на разработчиков api, которые сами отказываются писать мод используя это api :rolleyes:

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

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

Мне намного проще получить раз в месяц заказ на 200-300уе чем писать модуль по 5-10уе за штуку и заниматься и техподдержкой и доработкой и прочим.

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

смею напомнить что это как раз тот заказ который намного больше чем 200-300 уе и который вы перенаправили вашему соавтору по апи и причем оба отказались использовать апи в написании :)

ладно. не суть. просто к тому что сами же написали что "ну нафик, неудобно. по старинке проще"

вообшем не будем оффтопить на эту тему :)

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

Если Вы о гугл-мапс, то я не представляю ГДЕ там можно использовать API.

Да и речи про API там не было вообще.

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

1) $dle_api->install_mod ($name, $title, $descr, $icon, $allowed, $update = false);

2) $dle_api->uninstall_mod ($name);

3) $dle_api->change_mod_permissions ($name, $new_permissions)

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

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

1) $dle_api->install_mod ($name, $title, $descr, $icon, $allowed, $update = false);

2) $dle_api->uninstall_mod ($name);

3) $dle_api->change_mod_permissions ($name, $new_permissions)

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

Нет. В версии ДЛЕ 8.2 все данные о разделах админки хранятся в БД. Просто информация о нужном моде добавится в БД!

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

Итак. Вот и API v0.08

1) $dle_api->install_admin_module ($name, $title, $descr, $icon, $perm = 'all')

Установка Вашего модуля в админку DLE.

Параметры:

$name - имя Вашего файла без .php на конце. Модуль должен лежать в engine/inc/

$title - заголовок Вашего модуля

$descr - описание модуля

$icon - иконка модуля, должна лежать в engine/skins/images/ передавать с расширением

$perm - кто имеет доступ к модулю. Или all или ID групп через запятую

2) $dle_api->uninstall_module ($name)

Удаляет модуль $name из админ-панели

3) change_module_perms ($name, $perm)

Меняет привелегии к модулю $name на указанные в $perm

$perm при этом или all или ID групп через запятую.

Ссылка на скачивание в первом посте.

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

IT-Security,

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

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

Думаю, это вполне обосновано и не лишне. В крайнем случае - возможность отмены фильтра B)

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

Эм...API работает только в скриптах :)

Человек, имеющий доступ к ftp - априори может сделать что угодно :)

Поэтому в проверках смысла не вижу, а проверить кто устанавливает модуль не представляется возможным. Да и это лишнее :)

Задача API - упрощение тех или иных задач. Безопасность при этом ложится на плечи разработчика модуля.

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

Поэтому в проверках смысла не вижу

а разве данная настройка не может использоватся для установки доступа к скрипту разным группам пользователей? Например, установить к определённому модулю группы, которые могут производить его модерацию. А в последствии, чтобы админ из админки мог менять права доступа. При этом ведь никакая инсталяция модуля не ведётся.

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

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

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

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

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

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

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

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

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

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