2017年1月

来自:https://github.com/leangjia/ez_SQL_help-zh_cn

附:
ez_sql_help_zh_cn.htm

DEMO.PHP 演示示例代码:

<?php

    /**********************************************************************
    *  ezSQL initialisation for mySQL
    */

    // Include ezSQL core
    include_once "../shared/ez_sql_core.php";

    // Include ezSQL database specific component
    include_once "ez_sql_mysql.php";

    // Initialise database object and establish a connection
    // at the same time - db_user / db_password / db_name / db_host
    $db = new ezSQL_mysql('db_user','db_password','db_name','db_host');

    /**********************************************************************
    *  ezSQL demo for mySQL database
    */

    // Demo of getting a single variable from the db
    // (and using abstracted function sysdate)
    $current_time = $db->get_var("SELECT " . $db->sysdate());
    print "ezSQL demo for mySQL database run @ $current_time";

    // Print out last query and results..
    $db->debug();

    // Get list of tables from current database..
    $my_tables = $db->get_results("SHOW TABLES",ARRAY_N);

    // Print out last query and results..
    $db->debug();

    // Loop through each row of results..
    foreach ( $my_tables as $table )
    {
        // Get results of DESC table..
        $db->get_results("DESC $table[0]");

        // Print out last query and results..
        $db->debug();
    }

?>

----------以下转载----------

操作MySQL,使用ezSQL,简单而方便

ezSQL官方下载地址:http://justinvincent.com/ezsql

使用示例:

事先 include once <ez_sql.php>;

include once <ez_sql.php>;

取数值:

$var = $db->get_var("SELECT count(*) FROM users");


取对象:

$user = $db->get_row("SELECT name,email FROM users WHERE id = 2");


取数组:

$users = $db->get_results("SELECT name, email FROM users");
foreach ( $users as $user )
{
    // 使用对象语法
    echo $user->name;
    echo $user->email;
}

可以看出,其实函数返回值为二维数组,经foreach分解后,$user为每条记录的内容,可直接用$user->字段名的方式访问。

get_results()还有另一种调用方式:

// Extract results into the array $dogs (and evaluate if there are any results at the same time)..
if ( $dogs = $db->get_results(“SELECT breed, owner, name FROM dogs”, ARRAY_A) )
{
            // Loop through the resulting array on the index $dogs[n]
            foreach ( $dogs as $dog_detail )
            {
 
                        // Loop through the resulting array
                        foreach ( $dogs_detail as $key => $val )
                        {
                                    // Access and format data using $key and $val pairs..
                                    echo “<b>” . ucfirst($key) . “</b>: $val<br>”;
                        }
 
                        // Do a P between dogs..
                        echo “<p>”;
            }
}
else
{
            // If no users were found then if evaluates to false..
            echo “No dogs found.”;
}
 

输出结果:

Output:
Breed: Boxer
Owner: Amy
Name: Tyson

Breed: Labrador
Owner: Lee
Name: Henry

Breed: Dachshund
Owner: Mary
Name: Jasmine


执行Insert操作:

$db->query("INSERT INTO users (id, name, email) VALUES (NULL,'duuge','duuge@duuge.com')");


调试信息

// Display last query and all associated results

$db->debug();

四种方法:

  1. bool $db->query(query)
  2. var $db->get_var(query)
  3. mixed $db->get_row(query)
  4. mixed $db->get_results(query)

ezSQL functions

$db->get_results -- get multiple row result set from the database (or previously cached results)

$db->get_row -- get one row from the database (or previously cached results)

$db->get_col -- get one column from query (or previously cached results) based on column offset

$db->get_var -- get one variable, from one row, from the database (or previously cached results)

$db->query -- send a query to the database (and if any results, cache them)

$db->debug -- print last sql query and returned results (if any)

$db->vardump -- print the contents and structure of any variable

$db->select -- select a new database to work with

$db->get_col_info -- get information about one or all columns such as column name or type

$db->hide_errors -- turn ezSQL error output to browser off

$db->show_errors -- turn ezSQL error output to browser on

$db->escape -- Format a string correctly to stop accidental mal formed queries under all PHP conditions

$db = new db -- Initiate new db object.


ezSQL variables

$db->num_rows – Number of rows that were returned (by the database) for the last query (if any)

$db->insert_id -- ID generated from the AUTO_INCRIMENT of the previous INSERT operation (if any)

$db->rows_affected -- Number of rows affected (in the database) by the last INSERT, UPDATE or DELETE (if any)

$db->num_queries -- Keeps track of exactly how many 'real' (not cached) queries were executed during the lifetime of the current script

$db->debug_all – If set to true (i.e. $db->debug_all = true;) Then it will print out ALL queries and ALL results of your script.

$db->cache_dir – Path to mySQL caching dir.

$db->cache_queries – Boolean flag (see mysql/disk_cache_example.php)

$db->cache_inserts – Boolean flag (see mysql/disk_cache_example.php)

$db->use_disk_cache – Boolean flag (see mysql/disk_cache_example.php)

$db->cache_timeout – Number in hours (see mysql/disk_cache_example.php)



EOF


两分钟让你明白什么是ERP
www.chinamaker.net 2013-04-18 19:26:00 admin 10302
ERP(Enterprise ResourcePlanning)企业资源计划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。 。
一天中午,丈夫在外给家里打电话:“亲爱的老婆,晚上我想带几个同事回家吃饭可以吗?”(订货意向) 。
妻子:“当然可以,来几个人,几点来,想吃什么菜? ” 。
丈夫:“6个人,我们7点左右回来,准备些酒、烤鸭、番茄炒蛋、凉菜、蛋花汤……。你看可吗?”(商务沟通) 。

妻子:“没问题,我会准备好的。”(订单确认) 。

妻子记录下需要做的菜单(MPS计划),具体要准备的东西:鸭、酒、番茄、鸡蛋、调料……(BOM物料清单),发现需要:1只鸭蛋,5瓶酒,4个鸡蛋……(BOM展开),炒蛋需要6个鸡蛋,蛋花汤需要4个鸡蛋(共用物料)。
打开冰箱一看(库房),只剩下2个鸡蛋(缺料)。
来到自由市场,妻子:“请问鸡蛋怎么卖?”(采购询价) 。
小贩:“1个1元,半打5元,1打9.5元。” 。
妻子:“我只需要8个,但这次买1打。”(经济批量采购) 。
妻子:“这有一个坏的,换一个。”(验收、退料、换料) 。
回到家中,准备洗采、切菜、炒菜……(工艺线路),厨房中有燃气灶、微波炉、电饭煲……(工作中心)。
妻子发现拨鸭毛最费时间(瓶颈工序,关键工艺路线),用微波炉自己做烤鸭可能来不及(产能不足),于是阅览室在楼下的餐厅里买现成的(产品委外)。
下午4点,接到儿子的电话:“妈妈,晚上几个同学想来家里吃饭,你帮忙准备一下。”(紧急订单) 。
“好的,你们想吃什么,爸爸晚上也有客人,你愿意和他们一起吃吗?” 。
“菜你看着办吧,但一定要有番茄炒鸡蛋,我们不和大人一起吃,6:30左右回来。”(不能并单处理) 。
“好的,肯定让你们满意。”(订单确定) 。
“鸡蛋又不购了,打电话叫小贬送来。”(紧急采购) 。
6:30,一切准备就绪,可烤鸭还没送来,急忙打电话询问:“我是李太,怎么订的烤鸭还不送来?”(采购委外单跟催) 。
“不好意思,送货的人已经走了,可能是堵车吧,马上就会到的。” 。
门铃响了。
“李太太,这是您要的烤鸭。请在单上签一个字。”(验收、入库、转应付账款) 。
6:45,女儿的电话:“妈妈,我想现在带几个朋友回家吃饭可以吗?”(呵呵 ,又是紧急订购意向,要求现货) 。
“不行呀,女儿,今天妈已经需要准备两桌饭了,时间实在是来不及,真的非常抱歉,下次早点说,一定给你们准备好。”(哈哈,这就是ERP的使用局限,要有稳定的外部环境,要有一个起码的提前期 )。
…… …… 。
送走了所有客人,疲惫的妻子坐在沙发上对丈夫说:“亲爱的,现在咱们家请客的频率非常高,应该要买些厨房用品了(设备采购),最好能再雇个小保姆(连人力资源系统也有缺口了)。
丈夫:“家里你做主,需要什么你就去办吧。”(通过审核) 。
妻子:“还有,最近家里花销太大,用你的私房钱来补贴一下,好吗?”(最后就是应收货款的催要) 。
现在还有人不理解ERP吗?记住,每一个合格的家庭主妇都是生产厂长的有力竞争者。

摘自:http://www.odoov.com/
页面最后修改于2017年1月9日 (星期一) 13:44。
PDF下载Odoo大V社.pdf
首页
目录 [隐藏]
1 Odoo 大V社概况
1.1 Odoo中文版技术书籍项目
2 前言
3 第一章 Odoo 入门
3.1 安装Odoo主机服务器
3.1.1 准备Debian 主机
3.1.2 为创建Odoo用户帐户
3.2 从源码安装Odoo
3.3 创建新的Odoo应用数据库
3.3.1 管理你的Odoo数据库
3.4 Odoo 版本
3.5 更多服务器选项
3.5.1 Odoo 服务器配置文件
3.5.2 更改侦听端口
3.5.3 数据库的过滤选项
3.5.4 管理服务器日志消息
3.6 在工作站上进行开发
3.6.1 使用Linux 文本编辑器
3.6.2 安装和配置 Samba
3.6.3 激活开发者工具
3.7 安装第三方模块
3.7.1 查找社区模块
3.7.2 配置 addons 路径
3.7.3 更新应用程序列表
3.8 第一章 小结
4 第二章 构建您的第一个应用程序
4.1 基本概念
4.1.1 了解应用程序和模块
4.1.2 修改和扩展模块
4.1.3 创建模块的基本框架
4.1.4 关于许可证
4.1.5 添加 addons 路径
4.1.6 安装新模块
4.1.7 升级模块
4.1.8 服务器开发模式
4.2 模型层
4.2.1 创建数据模型
4.2.2 加入自动化测试
4.3 视图层
4.3.1 添加菜单选项
4.3.2 创建窗体视图
4.3.3 业务凭证窗体视图
4.3.4 添加动作按钮
4.3.5 用groups来组织forms
4.3.6 完整的Form视图
4.3.7 添加列表和搜索视图
4.4 业务逻辑层
4.4.1 添加业务逻辑
4.4.2 添加测试
4.5 设置安全访问权限
4.5.1 测试安全访问权限
4.5.2 添加访问控制安全
4.5.3 Row-level访问规则
4.6 更好的模块描述
4.7 第二章 小结
5 第三章 继承–扩展现有的应用程序
5.1 向待办事宜应用程序添加共享功能
5.2 扩展模型
5.2.1 向模型中添加字段
5.2.2 修改现有字段
5.2.3 修改模型的方法
5.3 扩展视图
5.3.1 扩展表单视图
5.3.2 扩展树视图和搜索视图
5.4 更多的模型继承机制
5.4.1 使用原型继承复制特征
5.4.2 使用委托继承嵌入模型
5.4.3 添加社交网络功能
5.5 修改数据
5.5.1 修改菜单和操作记录
5.5.2 修改安全记录规则
5.6 第三章 小结
6 第四章 模块数据
6.1 了解外部标识符
6.1.1 寻找外部标识符
6.2 导出和导入数据
6.2.1 导出数据
6.2.2 导入数据
6.2.3 CSV数据文件相关记录
6.3 模块数据
6.3.1 演示数据
6.4 XML数据文件
6.4.1 数据的noupdate属性
6.4.2 在XML里定义记录
6.4.2.1 设置字段值
6.4.2.2 使用表达式设置值
6.4.2.3 设置字段值的关系
6.4.3 常用模型的快捷键
6.4.4 XML数据文件的其它操作
6.4.4.1 删除记录
6.4.4.2 触发功能和工作流
6.5 第四章小结
7 第五章 模型 - 结构化应用程序数据
7.1 将应用程序特性组织到模块中
7.1.1 todo_ui模块介绍
7.2 创建模型
7.2.1 模型属性
7.2.2 模型和Python类
7.2.3 瞬态和抽象模型
7.2.4 检查现有模型
7.3 创建字段
7.3.1 基本字段类型
7.3.2 公共字段属性
7.3.3 特殊字段名称
7.4 模型之间的关系
7.4.1 多对一关系
7.4.2 多对多关系
7.4.3 一对多反向关系
7.4.4 分层关系
7.4.5 使用动态关系的参考字段
7.5 计算字段
7.5.1 在计算字段上搜索和写入
7.5.2 存储计算字段
7.5.3 关联字段
7.6 模型约束
7.7 第五章 小结
Odoo 大V社概况
Odoo 大V社成员来自五湖四海,他们热爱开源,无私奉献,甘于把自己的业余时间投入到公益的 Odoo 相关资料的整理中去,
为 Odoo 在中国区的推广无私奉献。
odoo 中文书籍交流群:343593855(验证信息:参与odoo中文书籍)

Odoo中文版技术书籍项目
项目一期目标: Odoo 中文开发手册
项目性质:公益,保留所有参与人员的署名权;项目成果归全人类
项目使命:Odoo 中文书籍编写整理,推倒 odoo 语言壁垒,助力 odoo 中国推广
项目成员:
统筹:
01.广州-唐振宽(稿件初审) 02.广州-黄伟杰(任务分派) 03.广州-彭 明(进度跟踪)
审核:
01.苏州-刘春涛(ChinaMaker)
成员:
01.苏州时 威 02.苏州庄春梅 03.杭州胡 恒 04.广州陈厚源

  1. 06.常州孙保锁 07.成都曾发军 08.深圳季蜗牛
    09.北京乔明洋 10.香港胡sir 11.上海高守庆 12.上海赵祥涛
    13.上海罗英川布 14.台北蘇sir 15.苏州-n37r06u3 16.石家庄-leo
    前言
    第一章 Odoo 入门
    安装Odoo主机服务器
    准备Debian 主机
    为创建Odoo用户帐户
    从源码安装Odoo
    创建新的Odoo应用数据库
    管理你的Odoo数据库
    Odoo 版本
    更多服务器选项
    Odoo 服务器配置文件
    更改侦听端口
    数据库的过滤选项
    管理服务器日志消息
    在工作站上进行开发
    使用Linux 文本编辑器
    安装和配置 Samba
    激活开发者工具
    安装第三方模块
    查找社区模块
    配置 addons 路径
    更新应用程序列表
    第一章 小结
    第二章 构建您的第一个应用程序
    基本概念
    了解应用程序和模块
    修改和扩展模块
    创建模块的基本框架
    关于许可证
    添加 addons 路径
    安装新模块
    升级模块
    服务器开发模式
    模型层
    创建数据模型
    加入自动化测试
    视图层
    添加菜单选项
    创建窗体视图
    业务凭证窗体视图
    添加动作按钮
    用groups来组织forms
    完整的Form视图
    添加列表和搜索视图
    业务逻辑层
    添加业务逻辑
    添加测试
    设置安全访问权限
    测试安全访问权限
    添加访问控制安全
    Row-level访问规则
    更好的模块描述
    第二章 小结
    第三章 继承–扩展现有的应用程序
    向待办事宜应用程序添加共享功能
    扩展模型
    向模型中添加字段
    修改现有字段
    修改模型的方法
    扩展视图
    扩展表单视图
    扩展树视图和搜索视图
    更多的模型继承机制
    使用原型继承复制特征
    使用委托继承嵌入模型
    添加社交网络功能
    修改数据
    修改菜单和操作记录
    修改安全记录规则
    第三章 小结
    第四章 模块数据
    了解外部标识符
    寻找外部标识符
    导出和导入数据
    导出数据
    导入数据
    CSV数据文件相关记录
    模块数据
    演示数据
    XML数据文件
    数据的noupdate属性
    在XML里定义记录
    设置字段值
    使用表达式设置值
    设置字段值的关系
    常用模型的快捷键
    XML数据文件的其它操作
    删除记录
    触发功能和工作流
    第四章小结
    第五章 模型 - 结构化应用程序数据
    将应用程序特性组织到模块中
    todo_ui模块介绍
    创建模型
    模型属性
    模型和Python类
    瞬态和抽象模型
    检查现有模型
    创建字段
    基本字段类型
    公共字段属性
    特殊字段名称
    模型之间的关系
    多对一关系
    多对多关系
    一对多反向关系
    分层关系
    使用动态关系的参考字段
    计算字段
    在计算字段上搜索和写入
    存储计算字段
    关联字段
    模型约束
    第五章 小结

ODOO OpenERP 8.0 开发基础教程连载一
转自:http://www.chinamaker.net/html/2014/study_1027/176.html
2014-10-27 14:30:31 phpcms 6505
ODOO OpenERP 8.0 开发基础教程连载一
作者:苏州远鼎信息技术有限公司(转载请保留此信息)

1.启动停止 Odoo server

     Odoo 使用客户机/服务器体系结构,其中客户端的 Web 浏览器通过 RPC 的方式访问 odoo 服务器。

业务逻辑和扩展运行在服务器端,当然也支持将一些客户端特性(例如,新的数据表示诸如交互式地图)添加到客户端。为了启动服务器,简单在命令行调用odoo.py,在某些情况下需要加入文件全路径 。
服务器思可以通过在终端按两次 ctrl-c 或者kill掉相应的服务器进程终止。

2.构建Odoo模块

服务器和客户端扩展被打包为在数据库中的任选加载模块。

Odoo模块可以添加全新的业务逻辑到Odoo系统,或者改变和扩展现有的业务逻辑:一个模块可以创建你的国家的会计规则到Odoo的通用会计系统,而下一个模块可能实现了一个车队的实时可视化管理。

在Odoo一切都以模块开头和结尾。

2.1 一个模块的组成

一个Odoo模块可以包含多个元素:
业务对象(Business Objects)

声明为Python类,这些资源会根据他们的配置被 Odoo 自动的持久化。

数据文件(Data Files)

XML或CSV文件中声明元数据(视图或工作流),配置数据(模块参数),演示数据等。

网络控制器(Web controllers)

处理来自Web浏览器的请求

静态网页数据(Static web data)

使用Web界面或网页的图像,CSS或JavaScript文件

2.2 模块结构
每个模块内都是模块目录中的一个目录。模块目录使用--addons路径选项指定。

技巧:大多数命令行选项也可以使用配置文件设置

    一个 Odoo 模块是由它的 Manifest 文件声明。这是强制性的,它包含了一个 Python 字典,声明模块的各种元数据:该模块的名称和说明,他正常工作所依赖的 Odoo 模块列表,引用的数据文件,...

Manifest 文件的一般结构为:

{

'name': "MyModule",
'version': '1.0',
'depends': ['base'],
'author': "Author Name",
'category': 'Category',
'description': """
Description text
""",
# data files always loaded at installation
'data': [
    'mymodule_view.xml',
],
# data files containing optionally loaded demonstration data
'demo': [
    'demo_data.xml',
],

}
模块也是一个名为 __init__.py 的 python package, 它用 import 引入这个模块的各种 python 文件。
举个例子,如果这个模块只有一个文件 mymodule.py, __init_.py 文件内容可能只有这一句:

import mymodule
幸运的是,有一个机制帮助你创建一个模块。
odoo.py 命令有一个子命令 scaffold 用来创建一个空模块:
odoo.py scaffold

这个命令为你的模块创建了一个子目录,并且自动的创建了模块的各种文件。
很多文件只有注释或者是XML。这些文件的使用会在这个教程中详细解释。
作业:创建一个模块

使用上面的命令创建一个空模块 Open Academy, 并且安装到 odoo 中。
1)调用命令 odoo.py scaffold openacademy addons
2)调整你模块的 manifest 文件。
3)不要动其它文件。
Use the command line above to create an empty module Open Academy, and install it in Odoo.

Invoke the command odoo.py scaffold openacademy addons.
Adapt the manifest file to your module.
Don’t bother about the other files
以下是生成的文件清单。随后我们详细解释。
openacademy/__openerp__.py
openacademy/__init__.py
openacademy/controllers.py
Oopenacademy/demo.xml
penacademy/models.py
from openerp import models, fields, api
openacademy/security/ir.model.access.csv
openacademy/templates.xml
2.3 对象 - 关系映射(ORM)
Odoo的一个关键组成部分是 ORM 层。这层避免了手工编写的大部分SQL,并提供可扩展性和安全性服务[2]。

业务对象被声明为扩展模式,它们集成到自动化系统的持久性Python类。

模型可以通过在其定义中进行配置设置多个属性。最重要的属性是_name是必需的,它定义了模块在Odoo系统中的名称。
这里是一个模块的最小完整定义:
from openerp import models
class MinimalModel(models.Model):

_name = 'test.model'

2.5 模块的字段(Fields)
字段Fields定义了model 可以保存什么、存在哪里。
Fields定义成 model 类的属性:

from openerp import models, fields

class LessMinimalModel(models.Model):

_name = 'test.model2'
name = fields.Char()

常见属性

象模块一样,字段 fields 也是可以通过把配置属性作为参数进行配置:
name = field.Char(required=True)
一些属性可以被所有字段使用,下面是最常见的几个:
string (unicode, default: field’s name)
字段在UI上的标签 (用户可见).
required (bool, default: False)
如果为True, 字段不能为空,当创建一个记录时它必须有一个值或者有默认值。
help (unicode, default: '')
长的形式,在用户界面上提供帮助提示
index (bool, default: False)
请求 Odoo 在数据库上对那个列创建用户索引。
Requests that Odoo create a database index on the column

简单字段(Simple fields)

字段可以分为两大类:
simple fields 是atomic 值直接存储在模块的表中。
和realtional fileds 关联本模块或者其他模块的记录。
simple fields a例子是 Boolean, Date, Char等.

保留字段(Reserved fields)

Odoo 创建了一些在所有的模块(model)中都有的字段。这些字段由系统管理不能被写入。如果需要的时候可以读取:

id (Id)
the unique identifier for a record in its model
create_date (Datetime)
creation date of the record
create_uid (Many2one)
user who created the record
write_date (Datetime)
last modification date of the record
write_uid (Many2one)
user who last modified the record
特殊字段(Special fields)

默认情况下, Odoo 要求所有的字段的都有一个 name fileds 以便执行各种显示和查询动作。为这些目的使用的字段可以通过设置 rec name 覆盖。

作业 定义一个model
定义一个新数据模块Course 在open academy 中.
一个课程有名称title和描述。课程必须有名称title。
编辑 openacademy/models.py 使它包含一个课程类。

openacademy/models.py
from openerp import models, fields, api

class Course(models.Model):

_name = 'openacademy.course'

name = fields.Char(string="Title", required=True)
description = fields.Text()

数据文件(Data files)
Odoo 很大程度上是一个数据驱动系统。
尽管模块的行为通过 python code 进行了个性化,但是模块(module)的部分数据在加载的时候已经被设置。

技巧

一些模块的存在仅仅是为了向 Odoo保存数据。
模块的数据通过数据文件声明:带elements 的XML 文件. 每一个element
创建或者更新一条数据库记录.
model="{model name}" id="{record identifier}"> name="{a field name}">{a value}

model is the name of the Odoo model for the record
id is an external identifier, it allows referring to the record (without having to know its in-database identifier)
elements have a name which is the name of the field in the model (e.g. description). Their body is the field’s value.
数据文件必须通过 manefest 文件声明以便被夹加载,他们可以定义在'data'列表 (总是加载) or 或者在 'demo' 列表 (只有在演示模式才能被加载。).

作业:定义一个演示数据(Define demonstration data)
创建一个带几条演示数据填充的 courses 模块,编辑openacademy/demo.xml文件使其包含一些数据.

openacademy/demo.xml


     model="openacademy.course" id="course0">
         name="name">Course 0
         name="description">Course 0's description

也可以是几行的

        
    
     model="openacademy.course" id="course1">
         name="name">Course 1
        
    
     model="openacademy.course" id="course2">
         name="name">Course 2
         name="description">Course 2's description

动作和菜单(Actions and Menus)
动作和菜单是数据库保存的标准记录,通常是通过数据文件声明。动作可以通过3种方式触发:

点击菜单 (linked to specific actions)
点击试图上的按钮 (if these are connected to actions)
对象的上下文动作
因为菜单声明有点复杂。有个捷径把菜单和相应的动作连接起来。

model="ir.actions.act_window" id="action_list_ideas">

 name="name">Ideas
 name="res_model">idea.idea
 name="view_mode">tree,form

id="menu_ideas" parent="menu_root" name="Ideas" sequence="10"

      action="action_list_ideas"/>

危险

动作必须在相应的xml文件中的菜单之前声明。
数据文件是按顺序执行的,在菜单创建时动作在数据库中的ID必须存在。

练习 定义一个菜单项。

定义一个新菜单项,访问在menu 项下的课程和sessions。用户可以:
1)显示课程列表
2)创建修改课程

Create openacademy/views/openacademy.xml with an action and the menus triggering the action。
Add it to the data list of openacademy/__openerp__.py

openacademy/__openerp__.py

'data': [
    # 'security/ir.model.access.csv',
    'templates.xml',
    'views/openacademy.xml',
],
# only loaded in demonstration mode
'demo': [

openacademy/views/openacademy.xml

<?xml version="1.0" encoding="UTF-8"?>

<data>
    <!-- window action -->
    <!--
        The following tag is an action definition for a "window action",
        that is an action opening a view or a set of views
    -->
    <record model="ir.actions.act_window" id="course_list_action">
        <field name="name">Courses</field>
        <field name="res_model">openacademy.course</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="help" type="html">
            <p class="oe_view_nocontent_create">Create the first course
            </p>
        </field>
    </record>

    <!-- top level menu: no paret -->
    <menuitem id="main_openacademy_menu" name="Open Academy"/>
    <!-- A first level in the left side menu is needed
         before using action= attribute -->
    <menuitem id="openacademy_menu" name="Open Academy"
              parent="main_openacademy_menu"/>
    <!-- the following menuitem should appear *after*
         its parent openacademy_menu and *after* its
         action course_list_action -->
    <menuitem id="courses_menu" name="Courses" parent="openacademy_menu"
              action="course_list_action"/>
    <!-- Full id location:
         action="openacademy.course_list_action"
         It is not required when it is the same module -->
</data>

相关标签 TAG : Odoo OpenERP 基础 教程

一、生产环境会多一些细节配置参数;
二、测试环境则没那么计较;


一、生产环境:


[options]
; addons模块的查找路径
addons_path = /usr/lib/python2.7/dist-packages/openerp/addons
; 管理员主控密码默认admin(用于创建、还原和备份数据库等操作)
admin_passwd = abc&123
; 自动重载? (推荐None)
auto_reload = False
; 用于导入导出的csv文件的默认分隔符
csv_internal_sep = ,
; data目录, 用于存放session信息、附件
data_dir = /var/lib/odoo/.local/share/Odoo
; 数据库主机名 (默认False推荐127.0.0.1)
db_host = False
; 数据库的最大连接数(推荐64)
db_maxconn = 64
; 指定要使用的数据库名(默认False)
db_name = False
; 数据库用户密码(8.0默认False7.0时代默认openerp)
db_password = False
; 数据库端口号(默认65432)
db_port = False
; 创建新数据库时使用的数据库模板
db_template = template1
; 数据库用户名(8.0默认odoo7.0时代默认openerp)
db_user = odoo
; 过滤要显示的数据库名称(推荐^%d默认点号星号通配)
dbfilter = ^%d
; 是否为调试模式(默认False)
debug_mode = False
; 哪些模块加载demo数据?
demo = {}
; 用于发送邮件的邮箱地址(默认False)
email_from = False
; 全球国家和地区省市精准经纬度数据库
geoip_database = /usr/share/GeoIP/GeoLiteCity.dat
; 在导入大量数据时使用这个选项, 如果在导入期间程序宕机, 你可以在当前状态下继续。指定一个存储中间导入状态的文件名。
import_partial =
; 一个处理器允许使用的最大物理内存(推荐2684354560可设None)
limit_memory_hard = 2684354560
; 一个处理器允许使用的最大虚拟内存(推荐2147483648可设None)
limit_memory_soft = 2147483648
; 一个处理器接受的最大请求数(推荐None可设8192)
limit_request = 8192
; 一个请求最多占用多少处理器时间(推荐None可设60)
limit_time_cpu = 60
; 一个请求允许的最长实时时间(推荐None可设120)
limit_time_real = 120
; 是否允许显示数据库列表(默认True)
list_db = True
; 是否将log写入db的ir_logging表(默认False)
log_db = False
; 日志的级别, 可选值包括debug_rpc_answer, debug_rpc, debug, debug_sql, info, warn, error, critical
log_db_level = warning
; 可以是一组module:log_level对, 默认值是:INFO(表示所有模块的默认日志级别为INFO级别)
log_handler = :INFO
; 日志的级别, 可选值包括debug_rpc_answer, debug_rpc, debug, debug_sql, info, warn, error, critical
log_level = info
; 指定用来存储日志的文件(可指定/var/log/odoo/odoo-server.log)
logfile = /var/log/odoo/odoo-server.log
; 是否按天存放日志
logrotate = False
; 长连接池使用的端口号?
longpolling_port = 8072
; 处理当前计划任务的最大线程数
max_cron_threads = 2
; 强制保存在virtual osv_memory表中的记录的最长时间,以小时为单位
osv_memory_age_limit = 1.0
; 强制一个virtual osv_memory表的最大记录数
osv_memory_count_limit = False
; 数据库可执行文件的路径(默认runtime/pgsql/bin可设None)
pg_path = None
; 存储服务器pid的文件名
pidfile = None
; 是否使用反向代理模式
proxy_mode = False
; 是否压缩报表
reportgz = False
; 指定用于SSL连接的证书文件
secure_cert_file = server.cert
; 指定用于SSL连接的主密钥文件
secure_pkey_file = server.pkey
; server范围的模块,以逗号分隔
server_wide_modules = None
; 发送邮件的SMTP用户密码
smtp_password = False
; SMTP端口号
smtp_port = 25
; SMTP服务器名
smtp_server = localhost
; SMTP服务器是否支持SSL协议
smtp_ssl = False
; 发送邮件的SMTP用户名
smtp_user = False
; 是否把日志发送给系统日志服务器
syslog = False
; 是否提交YAML或XML测试造成的数据库更改
test_commit = False
; 是否允许YAML和单元测试
test_enable = False
; YML测试文件
test_file = False
; 报表的范例的存放位置
test_report_directory = False
; 为系统提供一个参照的时区
timezone = False
; 哪些模块可翻译, 默认为all
translate_modules = ['all']
; 是否使用数据库的unaccent功能
unaccent = False
; 在安装时哪些模块不加载演示数据
without_demo = False
; 要使用的处理器数量(默认None可设为0 )
workers = 0
; 是否允许使用XML-RPC协议,默认为True
xmlrpc = True
; 指定使用XML-RPC协议的IP地址,为空时表示绑定到现有IP
xmlrpc_interface =
; XML-RPC协议使用的TCP端口(默认8069)
xmlrpc_port = 8069
; 是否允许使用XML-RPC安全协议,默认为True
xmlrpcs = True
; 指定使用XML-RPC安全协议的IP地址,为空时表示绑定到现有IP
xmlrpcs_interface =
; XML-RPC安全协议使用的TCP端口(默认8071)
xmlrpcs_port = 8071


二、测试环境:


[options]
; addons模块的查找路径
addons_path = D:\GreenOdoo8.0\source\openerp\addons
; 管理员主控密码默认admin(用于创建、还原和备份数据库等操作)
admin_passwd = admin
; 自动重载?(推荐None)
auto_reload = None
; 用于导入导出的csv文件的默认分隔符
csv_internal_sep = ,
; data目录, 用于存放session信息、附件
data_dir = data
; 数据库主机名(默认False推荐127.0.0.1)
db_host = 127.0.0.1
; 数据库的最大连接数(推荐64)
db_maxconn = 64
; 指定要使用的数据库名(默认False)
db_name = False
; 数据库用户密码(8.0默认False7.0时代默认openerp)
db_password = openerp
; 数据库端口号
db_port = 65432
; 创建新数据库时使用的数据库模板
db_template = template1
; 数据库用户名(8.0默认odoo7.0时代默认openerp)
db_user = openerp
; 过滤要显示的数据库名称(推荐^%d默认点号星号通配)
dbfilter = .*
; 是否为调试模式(默认False)
debug_mode = False
; 哪些模块加载demo数据?
demo = {}
; 用于发送邮件的邮箱地址(默认False)
email_from = False
; 在导入大量数据时使用这个选项, 如果在导入期间程序宕机, 你可以在当前状态下继续。指定一个存储中间导入状态的文件名。
import_partial =
; 一个处理器允许使用的最大物理内存(推荐2684354560可设None)
limit_memory_hard = None
; 一个处理器允许使用的最大虚拟内存(推荐2147483648可设None)
limit_memory_soft = None
; 一个处理器接受的最大请求数(推荐None可设8192)
limit_request = None
; 一个请求最多占用多少处理器时间(推荐None可设60)
limit_time_cpu = None
; 一个请求允许的最长实时时间(推荐None可设120)
limit_time_real = None
; 是否允许显示数据库列表(默认True)
list_db = True
; 是否将log写入db的ir_logging表(默认False)
log_db = False
; 可以是一组module:log_level对, 默认值是:INFO(表示所有模块的默认日志级别为INFO级别)
log_handler = :INFO
; 日志的级别, 可选值包括debug_rpc_answer, debug_rpc, debug, debug_sql, info, warn, error, critical
log_level = info
; 指定用来存储日志的文件(可指定/var/log/odoo/odoo-server.log)
logfile = openerp-server.log
; 是否按天存放日志
logrotate = False
; 长连接池使用的端口号?
longpolling_port = 8072
; 处理当前计划任务的最大线程数
max_cron_threads = 2
; 强制保存在virtual osv_memory表中的记录的最长时间,以小时为单位
osv_memory_age_limit = 1.0
; 强制一个virtual osv_memory表的最大记录数
osv_memory_count_limit = False
; 数据库可执行文件的路径(默认runtime/pgsql/bin可设None)
pg_path = runtime/pgsql/bin
; 存储服务器pid的文件名
pidfile = None
; 是否使用反向代理模式
proxy_mode = False
; 是否压缩报表
reportgz = False
; 指定用于SSL连接的证书文件
secure_cert_file = server.cert
; 指定用于SSL连接的主密钥文件
secure_pkey_file = server.pkey
; server范围的模块,以逗号分隔
server_wide_modules = None
; 发送邮件的SMTP用户密码
smtp_password = False
; SMTP端口号
smtp_port = 25
; SMTP服务器名
smtp_server = localhost
; SMTP服务器是否支持SSL协议
smtp_ssl = False
; 发送邮件的SMTP用户名
smtp_user = False
; 是否把日志发送给系统日志服务器
syslog = False
; 是否提交YAML或XML测试造成的数据库更改
test_commit = False
; 是否允许YAML和单元测试
test_enable = False
; YML测试文件
test_file = False
; 报表的范例的存放位置
test_report_directory = False
; 为系统提供一个参照的时区
timezone = False
; 哪些模块可翻译, 默认为all
translate_modules = ['all']
; 是否使用数据库的unaccent功能
unaccent = False
; 在安装时哪些模块不加载演示数据
without_demo = False
; 要使用的处理器数量(默认None可设为0 )
workers = None
; 是否允许使用XML-RPC协议,默认为True
xmlrpc = True
; 指定使用XML-RPC协议的IP地址,为空时表示绑定到现有IP
xmlrpc_interface =
; XML-RPC协议使用的TCP端口(默认8069)
xmlrpc_port = 8069
; 是否允许使用XML-RPC安全协议,默认为True
xmlrpcs = True
; 指定使用XML-RPC安全协议的IP地址,为空时表示绑定到现有IP
xmlrpcs_interface =
; XML-RPC安全协议使用的TCP端口(默认8071)
xmlrpcs_port = 8071


下载:
一、生产环境openerp-server.conf;
openerp-server (生产环境).conf
二、测试环境openerp-server.conf;
openerp-server.conf (本机测试环境).txt

一、转自:http://www.cnblogs.com/richardw/archive/2012/10/06/2713027.html
二、转自:https://sjolzy.cn/PHP-Class-ezSQL-database-operations.html(PHP数据库操作类 - ezSQL)

一、操作MySQL,使用ezSQL,简单而方便

最近使用PHP做点小东东,使用了ezSQL,真的感觉很简单很ez。

ezSQL官方下载地址:http://justinvincent.com/ezsql

使用示例:

取数值:

$var = $db->get_var("SELECT count(*) FROM users");


取对象:

$user = $db->get_row("SELECT name,email FROM users WHERE id = 2");


取数组:

复制代码

$users = $db->get_results("SELECT name, email FROM users");
foreach ( $users as $user )
{
    // 使用对象语法
    echo $user->name;
    echo $user->email;
}

复制代码
可以看出,其实函数返回值为二维数组,经foreach分解后,$user为每条记录的内容,可直接用$user->字段名的方式访问。

get_results()还有另一种调用方式:

复制代码

// Extract results into the array $dogs (and evaluate if there are any results at the same time)..
if ( $dogs = $db->get_results(“SELECT breed, owner, name FROM dogs”, ARRAY_A) )
{
            // Loop through the resulting array on the index $dogs[n]
            foreach ( $dogs as $dog_detail )
            {
 
                        // Loop through the resulting array
                        foreach ( $dogs_detail as $key => $val )
                        {
                                    // Access and format data using $key and $val pairs..
                                    echo “<b>” . ucfirst($key) . “</b>: $val<br>”;
                        }
 
                        // Do a P between dogs..
                        echo “<p>”;
            }
}
else
{
            // If no users were found then if evaluates to false..
            echo “No dogs found.”;
}

复制代码

输出结果:

Output:
Breed: Boxer
Owner: Amy
Name: Tyson

Breed: Labrador
Owner: Lee
Name: Henry

Breed: Dachshund
Owner: Mary
Name: Jasmine


执行Insert操作:

$db->query("INSERT INTO users (id, name, email) VALUES (NULL,'justin','jv@foo.com')");


调试信息

// Display last query and all associated results

$db->debug();

四种方法:

bool    $db->query(query)
var    $db->get_var(query)
mixed    $db->get_row(query)
mixed    $db->get_results(query)
ezSQL functions

$db->get_results -- get multiple row result set from the database (or previously cached results)

$db->get_row -- get one row from the database (or previously cached results)

$db->get_col -- get one column from query (or previously cached results) based on column offset

$db->get_var -- get one variable, from one row, from the database (or previously cached results)

$db->query -- send a query to the database (and if any results, cache them)

$db->debug -- print last sql query and returned results (if any)

$db->vardump -- print the contents and structure of any variable

$db->select -- select a new database to work with

$db->get_col_info -- get information about one or all columns such as column name or type

$db->hide_errors -- turn ezSQL error output to browser off

$db->show_errors -- turn ezSQL error output to browser on

$db->escape -- Format a string correctly to stop accidental mal formed queries under all PHP conditions

$db = new db -- Initiate new db object.

 

ezSQL variables

$db->num_rows – Number of rows that were returned (by the database) for the last query (if any)

$db->insert_id -- ID generated from the AUTO_INCRIMENT of the previous INSERT operation (if any)

$db->rows_affected -- Number of rows affected (in the database) by the last INSERT, UPDATE or DELETE (if any)

$db->num_queries -- Keeps track of exactly how many 'real' (not cached) queries were executed during the lifetime of the current script

$db->debug_all – If set to true (i.e. $db->debug_all = true;) Then it will print out ALL queries and ALL results of your script.

$db->cache_dir – Path to mySQL caching dir.

$db->cache_queries – Boolean flag (see mysql/disk_cache_example.php)

$db->cache_inserts – Boolean flag (see mysql/disk_cache_example.php)

$db->use_disk_cache – Boolean flag (see mysql/disk_cache_example.php)

$db->cache_timeout – Number in hours (see mysql/disk_cache_example.php)



二、PHP数据库操作类 - ezSQL

07 August 2010 10:57 Saturdayby Sjolzy
ezSQL 下载地址://sjolzy.cn/php/ezSQL/bak/ez_sql_2.05.zip

新版本是2.05添加了很多支持,包括 CodeIgniter,MSSQL, PDO等等。

查看示例:

Example 1

// Select multiple records from the database and print them out..
$users = $db->get_results("SELECT name, email FROM users");
foreach ( $users as $user ) {
            // Access data using object syntax
            echo $user->name;
            echo $user->email;
}

Example 2

// Get one row from the database and print it out..
$user = $db->get_row("SELECT name,email FROM users WHERE id = 2");
echo $user->name;
echo $user->email;

Example 3

// Get one variable from the database and print it out..
$var = $db->get_var("SELECT count(*) FROM users");
echo $var;

Example 4

// Insert into the database
$db->query("INSERT INTO users (id, name, email) VALUES (NULL,'justin','jv@foo.com')");

Example 5

// Update the database
$db->query("UPDATE users SET name = 'Justin' WHERE id = 2)");

Example 6

// Display last query and all associated results
$db->debug();

Example 7

// Display the structure and contents of any result(s) .. or any variable
$results = $db->get_results("SELECT name, email FROM users");
$db->vardump($results);

Example 8

// Get 'one column' (based on column index) and print it out..
$names = $db->get_col("SELECT name,email FROM users",0)
foreach ( $names as $name ) {
    echo $name;
}

Example 9

// Same as above ‘but quicker’
foreach ( $db->get_col("SELECT name,email FROM users",0) as $name ) {
    echo $name;
}

Example 10

// Map out the full schema of any given database and print it out..
$db->select("my_database");
foreach ( $db->get_col("SHOW TABLES",0) as $table_name ) {
    $db->debug();
    $db->get_results("DESC $table_name");
}
$db->debug();


转自永久地址:https://sjolzy.cn/PHP-Class-ezSQL-database-operations.html

--EOF--


本文永久地址:http://duuge.com/archives/ezSQL.html