Сегодня: 04:12:2024
С добрым утром!
Страниц (116): В начало « ... 108 109 110 111 112 113 114 [115] 116 »
Найдено сообщений: 1160 |
технарь |
Отправлено: 4 января 2012 — 08:45 • Тема: Использование SQL • Форум: Limbo CMS |
Ответов: 0 Просмотров: 665
|
Введение
Задавшись целью создать CMS на файлах и не потерять совместимости с SQL был написан грамматический анализатор (парсер) который в дальнейшем и был применен в Limbo . Парсер преобразует запросы согласно стандартам SQL и очень прост в использовании .
Система работает согласно стандартам ADODB а потому возможен безболезненный переход с базы на файлах к SQL базе данных.
Использование и подключение
When you are writing a module or a component the Limbo system automatically insures that it connects to the database . The database connection can be accessed using the $conn object
To connect to a database you will have to do something like
code:include("db.php");
$conn = &ADONewConnection('none');
$conn->prefix=$prefix; // if there is a prefix then table names will be like lc_mytable in the query
if($cache)$conn->cache=true;
if($qcache)$conn->qcache=true;
$conn->PConnect("","","",$absolute_path."data/");
6.3 Поддержка синтаксиса SQL
Supported SQL-code follows the standards but are limited to exactly the code alternatives below. Joins and sub-queries are NOT! supported and all SQL-code MUST! be written in uppercase like below (this is by the standard anyway). Use the included SQL-manager to check what code is working.
The system database have two (2) hard-coded fields; "id" who always is the primary key, and "lastupd" which contains the last updated date & time in a UNIX timestamp format.
[...] = optional code, {...} = alternatives; do not use the "{", "}", "[" and "]" in your code.
6.4.1 Выбор запроса
SELECT {*|filed1, field2...}
FROM table
[WHERE field {=|LIKE|<|>|<=|>=} 'value'|number [AND|OR] ...]]
[ORDER BY field {ASC|DESC}[, field...]]
6.4.2 Вставка запроса
INSERT INTO table (field1,field2,field3)
VALUES ('value1','value2',number3,...)
6.4.3 Дополнение запроса
UPDATE table
SET field1 = 'value1', field2 = number2, ...
[WHERE field {=|LIKE|<|>|<=|>=} 'value'|number [AND|OR] ...]]
6.4.4 Удаление запроса
DELETE FROM table
[WHERE field {=|LIKE|<|>|<=|>=} 'value'|number [AND|OR] ...]]
6.4.5 Создание таблиц
CREATE TABLE table (
id int(10) auto_increment ,
lastupd int(20) ,
field1 {int(N)|varchar(N)} {NULL|NOT NULL} [dafault 'value']
field2 {int(N)|varchar(N)} {NULL|NOT NULL}
field3 {int(N)|varchar(N)} {NULL|NOT NULL}
...
PRIMARY KEY (id)
)
6.4.6 Drop Query
DROP TABLE table
6.4 Функция ссылок
All functions and global vars, exept a few, are coded for compability with the ADODb library. All are named exactly the same way and can be called with the same arguments. Functions, arguments and vars not used by WSI_FTM but required by the ADODb library still exists, but as nonworking dummies.
$ADODB_Database (string). Store the last database driver used. This is a ADODb global value, not used by WSI_FTM, but included for compability.
$ADODB_vers (string). Show the program name and version.
$gSQLMaxRows (int). Set max recordsets to download (LIMIT function).
$gSQLBlockRows (int). Set max rows to be included in a block. Function not implemented in WSI_FTM but included for compability reasons.
string $conn->ErrorMsg (). returns the last error message which occured if any .
ADONewConnection() Set up the program class and returns the class pointer.
obj $conn = &ADONewConnection();
PConnect() Establish a permanent connection to a database. NOTE! If the database is named different from default, or set up in a folder other than default, the path and name is set here as last argument. If all defaults are used, then this is a dummy function in WSI_FTM, but must be used for compability with the ADODb library.
void $conn->PConnect([host], // dummy
[username], // dummy
[password], // dummy
[database name, default = "./data/"]);
Execute() Execute a SQL-string to manipulate the database. Returns true if success, else return false and put at error-message in the error-messages array (see function below). Recordset is stored in a class var and fetched by the function GetArray().
bool $rs = $conn->Execute(sql-string);
GetArray() Fetch the recordset as a 2-dim array. This is the only way you can get the recordset .
array $rows = $rs->GetArray();
GetLimit() Fetch the recordset after applying the limit operator . for example use it to get the top 10 downlods .
array $rows = $rs->GetLimit(sql-string,num,offset);
GetRow() Fetch the recordset as a row ( single recordset ).
array $row = $rs->GetArray(sql-string);
Insert_ID() Returns the new id after an INSERT.
int $new_id = $conn->Insert_ID();
Affected_Rows() Returns affected rows after UPDATE.
int $aff_rows = $conn->Affected_Rows();
RecordCount() Count all records in the recordset.
int $records = $conn->RecordCount();
FieldCount() Returns the number of fields in recordset.
int $fields_no = $conn->FieldCount();
MetaTables() Returns an array of table names in database.
array $tables = $conn->MetaTables();
MetaColumnNames() Returns an array of field names in table.
array $fields = $conn->MetaColumnNames(table_name);
MetaColumns() Returns an array of ADOFieldObjects. This function only returns the object pointer, see below for coding example.
array $meta_fld = $conn->MetaColumns(table_name);
string $fld_name = $meta_fld['fld_name']->name;
int $fld_maxlength = $meta_fld['fld_name']->max_length;
string $fld_type = $meta_fld['fld_name']->type;
bool $fld_null = $meta_fld['fld_name']->not_null;
bool $fld_def = $meta_fld['fld_name']->has_default;
mixed $fld_defval = $meta_fld['fld_name']->default_value;
6.5 Кеширование
Due to the slow nature in which the general text file based database operate special cache interface was built into the system which can be easily enabled and disabled by the user . The performace increase after using the cache system is vquite high and makes the system faster than MySQL for smaller database .
Two type of cacheing is used in the system
Resultset cacheing : In this the result set returned by a query is cached and returned next time the query is executed .
Query cacheing : In this the parsed query is stored for future use ( SQL parsing is not very fast )
In the system cacheing is disabled by default so to enable cacheing do the following where $conn is the database object
$conn->cache = true ; // Result set caching
$conn->qcache = true ; // Query cacheing
6.6 Благодарности
This system is an highly optimized and improved version of WSI Flat Table Manager Manual from WebbStyle International (WSI) in which the orignal parser was replaced by a parser that of Php-txt-db API from www.c-worker.ch |
технарь |
Отправлено: 4 января 2012 — 02:28 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28625
|
Весь вечер пытаюсь прицепить к движку новую версию редактора TinyMCE - пока безуспешно. |
технарь |
Отправлено: 3 января 2012 — 12:52 • Тема: Создание и редактирование модулей Limbo • Форум: Limbo CMS |
Ответов: 2 Просмотров: 1087
|
Для справки приведу копию статьи...
Цитата: Введение
Создание модулей для Limbo легкое и простое занятие, в некоторой степени похожее на создание модуля для мамбо. Пожалуйста, следуйте этому руководству, создавая модуль для Limbo.
Эта обучающая программа поможет Вам создать простой модуль, и должен помочь Вам в создании намного более мощных модулей в будущем. Я опишу здесь только основы, и этот способ поможет Вам в будущем создавать более сложные модули.
В этой обучающей программе мы будем строить модуль hello_world, который должен работать вместе с компонентом с таким же названием, который уже должен быть установлен. В нормальном модуле должно быть 2 файла, для установки и правильного использования. Файл инсталятора hello_world.xml и непосредственно модуль, mod_hello_world.php.
XML
Код файла hello_world.xml должен выглядеть так:
<?xml version="1.0" ?>
<mosinstall type="module">
<name>hello_world</name>
<creationDate>04/14/2004</creationDate>
<author>Doyle Lewis</author>
<copyright>Released under GNU/GPL License</copyright>
<authorEmail>support@mambo-hosting.com</authorEmail>
<authorUrl>www.mambo-hosting.com</authorUrl>
<version>1.0</version>
<description>Module to display "Hello World."</description>
<files>
<filename module="mod_hello_world">mod_hello_world.php</filename>
</files>
</mosinstall>
Теперь давайте выясним, что значат важные линии:
<?xml version="1.0" ?>
Это директива открытия xml. Вам нужно помещать ее в начало любого xml файла.
<mosinstall type="module">
Это сообщение для Limbo что начинается установка модуля.
<copyright>Released under GNU/GPL License</copyright>
Важно сообщить пользователям, каковы условия распространения Вашего модуля. Убедитесь, что лицензия присутствует, дайте людям знать, что Вы позволяете им делать или не делать с вашим модулем.
<description>Module to display "Hello World."</description>
Это сообщение пользователям, для чего предназначен модуль.
<files>
<filename module="mod_hello_world">mod_hello_world.php</filename>
</files>
Это очень важно. Это сообщает Limbo какой файл будет главным в модуле, а также какие еще файлы Вы бы хотели установить.
</mosinstall>
Такой должна быть последняя строка xml файла. Она завершает инсталлятор.
Код модуля
Теперь взгляните на наш модуль mod_hello_world.php. Он вызывает запрос из базы данных, где есть 2 строки `id` and `text`:
<?php
/***************************************************************************
* hello_world Module
* @ Package hello_world
* @ Copyright (C) 2004 Doyle Lewis
* @ All rights reserved
* @ hello_world is Free Software
* @ Released under GNU/GPL License : http://www.gnu.org/copyleft/gpl.html
* @ Version 1.0
**************************************************************************/
defined( '_VALID_ANT' ) or die( 'DirectAccesstothislocationisnotallowed.' );
global $conn;
$row =$conn->GetRow( "SELECT * FROM mos_hello_world");
echo $row['text'];
?>
Рассмотрим подробнее:
defined( '_VALID_ANT' ) or die( 'DirectAccesstothislocationisnotallowed.' );
Это очень важная строка, всегда используйте ее в Ваших модулях для Limbo. Она будет препятствовать людям получать доступ к этому файлу снаружи Limbo.
global $conn;
$conn - это переменная Limbo, которая хранит информацию базы данных. Она используется, как глобальная переменная, так что Вы можете использовать ее всюду в вашем модуле. Она пригодиться Вам, когда Вы будете использовать базу данных.
$row =$conn->GetRow( "SELECT * FROM mos_hello_world");
Это собственно Ваш запрос к базе данных, возвращающий строку в переменную $row .
echo $row['text'];
Это сообщение Limbo показывать колонку 'текст' из Вашей строки. 'текст' в этом случае установлен в "Hello World" так что мы получим желаемый результат.
Вот и весь простой модуль, использующий основной программный интерфейс Limbo. Для получения дополнительной информации о переменной $conn смотрите раздел Программный интерфейс. Вы узнаете много интересного. |
технарь |
Отправлено: 3 января 2012 — 07:38 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28625
|
Вот так будет выглядеть Лимбо в минимальной конфигурации.
Нашел косяки в работе интерфейса.
Они были малозаметны, пока я не передвинул элементы меню.
Но исправлять буду завтра - сегодня спать. |
технарь |
Отправлено: 3 января 2012 — 06:17 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28625
|
Кстати в плане локализации.
Есть мысль интерфейс и локализацию приблизить к Джумле. Но это не потому что у меня нет мозгов самому локализовать, а что бы обеспечить преемственность интерфейсов, что бы люди с Джумлы нормально чувствовали себя на Лимбе и наоборот.
Если есть возражения - пишите... пока я не начал сильно ковырять локализацию. |
технарь |
Отправлено: 3 января 2012 — 06:10 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28625
|
Сегодня правил интерфейс админки.
Поправил локализацию и расположение элементов.
краткое описание перенес наверх, потому что оно там графически более вписывается, ну а картинку отделил потому что она вообще не смотрелась слипшись с окном её выбора. |
технарь |
Отправлено: 2 января 2012 — 19:04 • Тема: Команды меню • Форум: Limbo CMS |
Ответов: 0 Просмотров: 637
|
Поиск - ссылка на компонент Поиск
Главная - ссылка на компонент Главная страница
Управление - внешняя ссылка admin.php
Профиль - ссылка на компонент Пользователи
Статья - ссылка index.php?option=content&task=new
Ссылка - ссылка index.php?option=weblinks&task=new
Выход - ссылка index.php?option=login&task=logout |
технарь |
Отправлено: 2 января 2012 — 05:13 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28625
|
Победил!!! Ура!
Теперь я любой элемент могу выкусить и проинсталлировать назад без рождения глюков.
Все, пора спать. |
технарь |
Отправлено: 2 января 2012 — 03:41 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS |
Ответов: 115 Просмотров: 28625
|
Новая проблема. Некоторые модули заявлены как интегрированные в ядро, но по сути являются отдельными и могут быть вычленены. Я попробовал. Удаление прошло без хлопот, но вот при попытке обратно проинсталлировать вылазит косяк - в админке появляется пункт меню ведущий в никуда. Не смертельно конечно, но...
Короче пока есть терпение попытаюсь побороть. Нужно к инсталлятору дописать код, который будет после установки компонента искать запись о нем в базе и править параметр, отвечающий за видимость в меню. |
|
Страниц (116): В начало « ... 108 109 110 111 112 113 114 [115] 116 »
|
|