OpenCartの第一人者になる方法は?[閉まっている]


98

公式フォーラムでのapi呼び出しを除いて、ドキュメントがないようです。ZendフレームワークとCodeIgniterフレームワークの経験があります。OpenCartマスターは、それを学び、最短時間でマスターするための最良の方法を私に勧めることができますか?私はすぐにそれで大きなプロジェクトをしなければなりません。



これは本当に重要な質問です
KAD

1
この質問をありがとう、それは私を大いに助けてくれました
Bipul Roy

@BipulRoy嬉しいです!今は人気の質問のようです!
CodeCrack 2018

回答:


311

初心者のためのOpenCart 1.5.X開発者向けクイックスタートガイド

このガイドは、PHP、OOP、およびMVCアーキテクチャに精通している開発者を対象としています。

以下に、カートのカタログ側の例を示します。管理者側は、関連するセクションに記載されているビューを除き、機能は同じです。


ライブラリを理解する

すべてのライブラリ機能は、を使用して、コントローラー、モデル、ビューからアクセスできます$this->library_name。これらはすべて/system/library/フォルダにあります。例えば、現在のショッピングカートの製品にアクセスするには、使用する必要がありますCartしているクラスを、/system/library/cart.phpそして使用してアクセスすることができます$this->cart->getProducts()

よく使うアイテム

  • customer.php -顧客関連機能
  • user.php -管理ユーザー関連機能
  • cart.php -カート関連機能
  • config.php -すべての設定はこれから読み込まれます
  • url.php -URL生成関数

ルートパラメータについて

OpenCartのフレームワークはroute=aaa/bbb/ccc、クエリ文字列パラメーターのinに依存して何をロードするかを認識し、各ページで編集する必要のあるファイルを見つけるための土台となる機能です。ほとんどのルートの実際の使用のみaaa/bbbしかし、いくつかの三つの部分含まれ、二つの部分として見られるべきaaa/bbb/ccc最初の部分aaa、一般的に、このようなコントローラやテンプレートフォルダなど、一般的なフォルダ内のフォルダに関連します。2番目の部分は通常、関連.phpまたは.tpl拡張子なしのファイル名に関連しています。3番目の部分については、以下の「コントローラについて」セクションで説明します。


言語を理解する

言語はサブフォルダーのフォルダーに保存され/catalog/language/ますyour-language。この中で、さまざまなページで使用される一般的なテキスト値your-language.phpはフォルダー内のファイルに格納されているため、カタログ側の英語の場合、値はにありcatalog/language/english/english.phpます。特定のページテキストについてrouteは、ページのが必要になります(これは一般的に当てはまりますが、好きな言語ファイルを指定できるとは限りません)。たとえば、検索ページにはルートproduct/searchが含まれているため、そのページの言語固有のテキストはcatalog/language/english/product/search.php(ファイル名とサブフォルダーが.php

言語をコントローラにロードするには、次を使用します

$this->language->load('product/search');

次に、言語ライブラリ関数getを使用して、次のような特定の言語テキストを取得できます。

$some_variable = $this->language->get('heading_title');

言語変数は$_、キーとテキスト値の配列である特別な変数を使用して言語ファイルに割り当てられます。あなたの/catalog/language/english/product/search.phpようなものを見つける必要があります

$_['heading_title']     = 'Search';

グローバル言語ファイルの値english/english.phpは自動的にロードされ、$this->language->loadメソッドなしで使用できます


コントローラーについて

コントローラはに基づいてロードされ、route理解するのはかなり簡単です。コントローラーは/catalog/controller/フォルダーにあります。前の例から続けて、検索ページのコントローラーは/product/search.phpこのフォルダー内にあります。後に続くルート.phpが使用されていることに再度注意してください。

コントローラファイルを開くと、クラスを拡張するPascal Caseクラス名が表示さControllerControllerProductSearchます。これもルートに固有のものでありController、サブフォルダー名とファイル名が続き、拡張子は大文字になりません。大文字は実際には必要ありませんが、読みやすくするためにお勧めします。クラス名は、サブフォルダーとファイル名から文字と数字以外の値を取りません。アンダースコアは削除されます。

クラス内にはメソッドがあります。宣言されたクラスのメソッドは、publicルートを介して実行するためにアクセス可能privateです-そうではありません。デフォルトでは、標準の2パートルート(aaa/bbb上記)では、デフォルトのindex()メソッドが呼び出されます。ルートの3番目の部分(ccc上記)が使用されている場合、このメソッドが代わりに実行されます。たとえばaccount/return/insert/catalog/controller/account/return.phpファイルとクラスをロードし、insertメソッドを呼び出そうとします


モデルについて

OpenCartのモデルは/catalog/model/フォルダー内にあり、ルートではなく機能に基づいてグループ化されているため、次の方法でコントローラーにロードする必要があります

$this->load->model('xxx/yyy');

これにより、というサブフォルダにファイルが読み込まxxxyyy.phpます。その後、オブジェクトを介して使用できるようになります

$this->model_xxx_yyy

コントローラと同様に、その publicメソッドます。たとえば、画像のサイズを変更するには、tool/imageモデルを使用しresizeて次のようにそのメソッドを呼び出します

$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);

コントローラーからのビューでの変数割り当てについて

コントローラーからビューに値を渡すには、データを $this->data変数ます。これは基本的に、キー=>値のペアの配列です。例として

$this->data['example_var'] = 123;

ビューでこれにアクセスすることは、extract()に精通している場合は少し理解しやすいはずです。各キーを変数に変換メソッドにです。したがって、example_varキー$example_varはビュー内でそのようになり、そのようにアクセスできます。


テーマを理解する

テーマはカタログ側でのみ使用でき、基本的にはテンプレート、スタイルシート、テーマ画像のフォルダーです。テーマフォルダーは/catalog/view/theme/、テーマ名が後に続くます。フォルダ名は例外で重要ではないdefaultフォルダ

管理者側が使用する /admin/view/template//theme/theme-name/異なるテーマを許可しないため、パスからをます)

テンプレートファイルは template、themeフォルダー内のフォルダーにあります。現在選択されているテーマで使用できないテンプレートがある場合は、代わりにデフォルトのフォルダーのテンプレートが代替として使用されます。つまり、非常に少数のファイルでテーマを作成しても、完全に機能します。また、アップグレードが行われるときのコードの重複や問題も減少します


ビュー(テンプレート)を理解する

言語やモデルと同様に、ビューファイルは通常ルートに関連していますが、必ずしもそうである必要はありません。通常、カタログ側のテンプレートは、/catalog/view/theme/your-theme/template/それが存在しない場合を除いて見つかります。その場合、デフォルトのテーマのテンプレートが使用されます。上記の検索ページの例では、ファイルはproduct/search.tplです。3つの部分を持つルートaaa/bbb_ccc.tplの場合、ハードセットルールはありませんが、通常はそうです。管理者では、ほとんどのページがこれに従いますが、商品リストページなどのアイテムをリストするページがcatalog/product_list.tplあり、商品編集フォームがcatalog/product_form.tpl。繰り返しますが、これらは設定されていませんが、デフォルトのカートの標準です。

テンプレートファイルは実際には別のphpファイルですが、.tpl拡張子が付いており、実際にはコントローラーファイルで実行されます。したがって、コントローラーでコーディングできるものはすべてテンプレートファイルで実行できます(絶対に推奨されない限り推奨されません)必要)


データベースオブジェクトについて

クエリは次を使用して実行されます

$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");

DB_PREFIX 名前が示すように、存在する場合はデータベースプレフィックスを含む定数です。

$resultSELECTいくつかのプロパティを含むクエリのオブジェクトを返します

$result->row 1つ以上が連想配列として返される場合、最初の行のデータが含まれます

$result->rows 行結果の配列が含まれ、foreachを使用したループに理想的

$result->num_rows 返された結果の数が含まれています

$this->dbオブジェクトが持ついくつかの追加メソッドもあります

$this->db->escape()渡された値に対してmysql_real_escape_string()を使用します

$this->db->countAffected の影響を受ける行数を返します UPDATEクエリなどの

$this->db->getLastId()mysql_insert_id()を使用して、最後の自動インクリメントIDを返します


予約変数について

OpenCartは、標準の代わりに使用する変数を事前に定義している$_GET$_POST$_SESSION$_COOKIE$_FILES$_REQUEST$_SERVER

$_SESSION$this->session->datadataが連想配列であるところを使用して編集され、$_SESSION

他のすべてはを使用$this->requestしてアクセスでき、有効化/無効化されたマジッククオートに準拠するように「クリーンアップ」されているため、

$_GET なる $this->request->get

$_POST なる $this->request->post

$_COOKIE なる $this->request->cookie

$_FILES なる $this->request->files

$_REQUEST なる $this->request->request

$_SERVER なる $this->request->server


概要

上記は開発者のための完全なガイドではありませんが、うまくいけば、開発を始める人のための良い出発点になるでしょう。


3
ありがとう!どこで手に入れたの?
CodeCrack、

64
私はそれを書きました。私はそれが書く必要があり、クエストに合うと思った
ジェイ・ギルフォード

2
非常に素晴らしい。ほとんどのガイドよりもはるかに有益です。万が一上級者はいますか?
CodeCrack

3
これにはコミュニティWikiステータスが付与されます
Stann0rz

1
@UltimateKing-このガイドでは、独自のModの作成を開始するのに十分な情報がすでに提供されています。ネット上のモジュール開発に固有のチュートリアルもあります
Jay Gilford

36

グローバルライブラリメソッド:基本的なopencartライブラリ関数とその機能。これらのほとんどは、カタログまたは管理フォルダー(コントローラー、モデル、ビュー)のどこからでも呼び出すことができます。

CACHE
$this->cache->delete($key) - Deletes cache [product, category, country, zone, language, currency,
manufacturer]

CART
$this->cart->getProducts() Gets all products currently in the cart including options, discounted prices, etc.
$this->cart->add( $product_id, $qty = 1, $options = array()) - Allows you to add a product to the cart
$this->cart->remove( $key ) - Allows you to remove a product from the cart
$this->cart->clear() - Allows you to remove all products from the cart
$this->cart->getWeight() - Sum of the weight of all products in the cart that have require shipping set to Yes
$this->cart->getSubTotal() - returns the subtotal of all products added together before tax
$this->cart->getTotal() - returns the total of all products added together after tax
$this->cart->countProducts() - returns the count of all product in the cart
$this->cart->hasProducts() - returns true if there is at least one item in the cart
$this->cart->hasStock() - returns false if there is at least one item in the cart that is out of stock
$this->cart->hasShipping() - returns true if there is at least one item in the cart that requires shipping
$this->cart->hasDownload() - returns true if there is at least one item in the cart that has a download
associated

CONFIG
$this->config->get($key) - returns setting value by keyname based on application (catalog or admin)
$this->config->set($key, $value) - set the value to override the setting value. DOES NOT SAVE TO DATABASE

CURRENCY
$this->currency->set($currency) - set or override the currency code to be used in the session
$this->currency->format($number, $currency = '', $value = '', $format = TRUE) - format the currency
$this->currency->convert($value, $from, $to) - convert a value from one currency to another. Currencies must
exist
$this->currency->getId() - get the database entry id for the current currency (1, 2, 3, 4)
$this->currency->getCode() - get the 3-letter iso code for the current currency (USD, EUR, GBP, AUD, etc)
$this->currency->getValue($currency) - get the current exchange rate from the database for the specified
currency.
$this->currency->has(currency) - Check if a currency exists in the opencart currency list

CUSTOMER
$this->customer->login($email, $password) - Log a customer in
$this->customer->logout() - Log a customer out
$this->customer->isLogged() - check if customer is logged in
$this->customer->getId() - get the database entry id for the current customer (integer)
$this->customer->getFirstName() - get customer first name
$this->customer->getLastName() - get customer last name
$this->customer->getEmail() - get customer email
$this->customer->getTelephone() - get customer telephone number
$this->customer->getFax() - get customer fax number
$this->customer->getNewsletter() - get customer newsletter status
$this->customer->getCustomerGroupId() - get customer group id
$this->customer->getAddressId() - get customer default address id (maps to the address database field)

DATABASE
$this->db->query($sql) - Execute the specified sql statement. Returns row data and rowcount.
$this->db->escape($value) - Escape/clean data before entering it into database
$this->db->countAffected($sql) - Returns count of affected rows from most recent query execution
$this->db->getLastId($sql) - Returns last auto-increment id from more recent query execution 4

DOCUMENT (*Called from controller only before renderer)
$this->document->setTitle($title) - Set page title
$this->document->getTitle()- Get page title
$this->document->setDescription($description) - Set meta description
$this->document->getDescription()- Get meta description
$this->document->setKeywords()- Set meta keywords
$this->document->getKeywords()- Get meta keywords
$this->document->setBase($base) - Set page base
$this->document->getBase() - Get page base
$this->document->setCharset($charset) - Set page charset
$this->document->getCharset() - Get page charset
$this->document->setLanguage($language) - Set page language
$this->document->getLanguage()- Get page language
$this->document->setDirection($direction) - Set page direction (rtl/ltr)
$this->document->getDirection()- Get page direction (rtl/ltr)
$this->document->addLink( $href, $rel )  Add dynamic <link> tag
$this->document->getLinks()- Get page link tags
$this->document->addStyle( $href, $rel = 'stylesheet', $media = 'screen' )  Add dynamic style
$this->document->getStyles()- Get page styles
$this->document->addScript( $script ) - Add dynamic script
$this->document->getScripts()- Get page scripts
$this->document->addBreadcrumb($text, $href, $separator = ' &gt; ')  Add breadcrumb
$this->document->getBreadcrumbs()- Get Breadcrumbs

ENCRYPT
$this->encryption->encrypt($value) - Encrypt data based on key in admin settings
$this->encryption->decrypt($value) - Decrypt data based on key in admin settings

IMAGE
$this->image->resize($width = 0, $height = 0)

JSON
$this->json->encode( $data )
$this->json->decode( $data , $assoc = FALSE)

LANGUAGE
$this->language->load($filename);

LENGTH
$this->length->convert($value, $from, $to) - convert a length to another. units must exist
$this->length->format($value, $unit, $decimal_point = '.', $thousand_point = ',') - format the length to use
unit

LOG
$this->log->write($message) - Writes to the system error log

REQUEST
$this->request->clean($data) - Cleans the data coming in to prevent XSS
$this->request->get['x'] - Same as $_GET['x']
$this->request->post['x'] - Same as $_POST['x']

RESPONSE
$this->response->addHeader($header) - additional php header tags can be defined here
$this->response->redirect($url) - redirects to the url specified

TAX
$this->tax->setZone($country_id, $zone_id) - Set the country and zone id for taxing (integer)
$this->tax->calculate($value, $tax_class_id, $calculate = TRUE) - Calculate all taxes to be added to the total
$this->tax->getRate($tax_class_id) - Get the rates of a tax class id
$this->tax->getDescription($tax_class_id) - Get the description of a tax class id
$this->tax->has($tax_class_id) - Check if a tax class id exists in opencart

SESSION
$this->session->data['x'] - Same as $_SESSION['x']  

9

初心者開発者向けのドキュメントが掲載されたOpenCart Wiki Webサイトがあります。詳細については、以下のURLに従ってください。

http://wiki.opencarthelp.com/doku.php?id=start
http://wiki.opencarthelp.com/doku.php?id=methods_reference

インターネットアーカイブリンク

http://web.archive.org/web/20160305131349/http://wiki.opencarthelp.com/doku.php?id=start http://web.archive.org/web/20160305131349/http://wiki .opencarthelp.com / doku.php?id = methods_reference

たとえば、メソッドリファレンスには次の詳細があります。

  1. お客様ログイン
  2. DBアクセス
  3. ショッピングカートの取り扱い
  4. 構成
  5. キャッシュ
  6. 通貨の取り扱い

まだいくつかのページが作成中ですが、参考になるでしょう。

[更新]

2018年1月の時点で、opencarhelp.comドメインはダウンしています。


数か月経ってもまだ多くの情報が欠けているようです。このプロジェクトは中止されましたか?
Pacerier 2014年

@Pacerier、それについてはよくわかりません。
ダルマン2014年

これは、カートwikiを参照していても素晴らしいページです。wiki.opencarthelp.com/ doku.php?id
Nassimの

4

このトピックはすでに何度も回答されていますが、私の経験に基づいてOpenCartを習得するための別のアプローチを提供したいと思います。

実践的学習

少数のファイルを使用して独自のOpenCartフレームワークを最初から作成することで、すべてがどのように組み合わされているかを理解できます。OpenCartのファイル構造を模倣します。

ファイルを作成する index.php

<?php
// My simpleCart

1.レジストリ

OpencartはRegistryパターンを使用して、ロードされたクラスのすべてのインスタンスをリストします。OpenCartアプリの心臓部です。レジストリオブジェクトは、他のオブジェクトにすばやくアクセスできるように、すべてのカテゴリ、モデル、およびライブラリに渡されます。

パスを持つファイルを作成する /system/engine/registry.php

<?php
// Registry class. 
class Registry
{
    private $data = array();

    public function set($key, $value){
        $this->data[$key] = $value;
    }

    public function get($key){
        return (isset($this->data[$key])) ? $this->data[$key] : false;
    }
}

あなたの index.php

<?php
// My simpleCart

//load dependency files
require_once('system/engine/registry.php');

//initialize registry
$registry = new Registry;

2.出力

次に、将来HTMLになる出力を追加しましょう。結局のところ、全体のアイデアは、ブラウザにテキストの文字列を送信することです。

ファイルを作成する system/library/response.php

<?php
class Response {
    private $output;

    public function getOutput() {
        return $this->output;
    }

    public function setOutput($output) {
        $this->output = $output;
    }

    public function output() {
        if ($this->output) {
            echo $this->output;
        }
    }
}

そしてあなたの中で index.php

<?php
// My simpleCart

//load dependency files
require_once('system/engine/registry.php');
require_once('system/library/response.php');

//initialize registry
$registry = new Registry;

//initialize response
$response = new Response;
//add response object to the registry
$registry->set('response', $response);

//lets set an output as a test
$registry->get('response')->setOutput('Hello World');

//send the output to the client
$registry->get('response')->output();

例としてHello worldを追加したことに注意してください。さらに削除します。サイトを更新して確認してください。ブラウザにが表示されますHello World

3.コントローラ

コントローラはページと考えてください。それらはクライアントに表示されるものを定義します:テキスト、html、json、ダウンロード、または画像ですらあります。ここでは、テキストを送信するページが必要です。

homeページのコントローラーを作成します。

パス付きのファイルを追加する catalog/controller/common/home.php

<?php

class ControllerCommonHome{

    private $registry = array();

    public function __construct($registry){
        $this->registry = $registry;
    }

    public function index(){

        $output = 'Home Page';
        //using the registry to get the response object and set the Output
        $this->registry->get('response')->setOutput($output);
    }
}

そしてあなたの編集 index.php

<?php
// My simpleCart

//load registry
require_once('system/engine/registry.php');
//load response
require_once('system/library/response.php');

//initialize registry
$registry = new Registry;

//initialize response
$response = new Response;
//add resoinse object to the registry
$registry->set('response', $response);

//load controller common/home
require_once('catalog/controller/common/home.php');
$controller = new ControllerCommonHome($registry);
$controller->index();

//send the output to the client
$registry->get('response')->output();

$refistryControllerCommonHome に渡して、コントローラー内でそれにアクセスできるようにしたことに注意してください。

4.ルーター

コントローラーをハードコーディングする必要はありません。パラメータを使用しますrouteロードするコントローラーをカートに指示するために、URLアドレスの。

パス付きのファイルを作成する system/library/request.php

<?php
class Request {
    public $get = array();

    //for now I just need the $_GET parameter
    public function __construct() {
        $this->get = $_GET;
    }
}

ルートに基づいてコントローラーファイルを初期化するルータークラスを作成します(つまり、コントローラーを動的に呼び出します)。

<?php
class Router {
    private $registry;

    public function __construct($registry) {
        $this->registry = $registry;
    }

    public function dispatch($route) {
        require_once('catalog/controller/'.$route.'.php');
        $class = "Controller".str_replace('/', '', $route);
        $controller = new $class($this->registry);
        $controller->index();
    }
}

それをあなたにロードする index.php

<?php
require_once('system/engine/registry.php');
require_once('system/engine/router.php');
require_once('system/library/response.php');
require_once('system/library/request.php');

$registry = new Registry;

$response = new Response;
$registry->set('response', $response);

$request = new Request;
$registry->set('request', $request);

//get the route from the url
if(isset($registry->get('request')->get['route'])){
    $route = $registry->get('request')->get['route'];
}else{
    $route = 'common/home';
}

//initiate the router and dispatch it base on the route
$router = new Router($registry);
$router->dispatch($route);


$registry->get('response')->output();

すべてをに読み込ん$registryでからに渡し、次にに渡していることに注目$routerしてください$controller

この投稿はすでに長すぎますが、OpenCartのMVCパターンの基本を理解していただければ幸いです。

この投稿を続けて、モデルやビューなど他のものがどのように機能するかを教えてほしい場合は、この回答を評価してください。

Youtube https://www.youtube.com/dreamventionと私のブログhttps://dreamvention.com/blogもチェックしてください


1

PHPは5000超える組み込み関数を持つかなり大きな言語ですため、新しいプラットフォームを学習するための1つの戦略は、最も頻繁に使用する関数を特定し、それらをよく理解するために時間を費やすことです。

OpenCartソースコードに対していくつかのクエリを実行しました。最もよく使用される関数のトップ10は次のとおりです。

array()
count()
explode()
implode()
mktime()
delete()
time()
date()
sprintf()
list()

ここにリストされている52のすべてと、一般的に使用される関数を特定するために任意のコードベースで使用できるLinux bashコマンド:https : //www.antropy.co.uk/blog/efficient-learning-for-new-opencart-developers/


1

このYouTube動画再生リストは、OpenCart開発者の達人になるのにも役立ちます。

OpenCartビデオチュートリアル

  1. 紹介と目次このビデオでは、シリーズの紹介を行います
  2. OpenCartのインストールlocalhostこのビデオでは、localhostでのOpenCartのインストールについて説明します
  3. Opencartのファイルとフォルダーの構造OpenCartのファイルとフォルダーの構造について説明します
  4. OpenCartでのデータベーステーブルスキーマの作成データベーステーブルスキーマを示し、OpenCartでデータベーステーブルを作成する方法を示します。
  5. OpenCartライブラリの定義済みオブジェクトのメソッドOpenCartライブラリの定義済みオブジェクトのメソッドについて説明し、それらの場所を示します。
  6. OpenCartでのMVCLパターン、コードフロー、要求と応答OpenCartでのMVCLパターン、コードフロー、要求と応答を示しています。以下の図のようにフローを説明します。 コードで記述されたMVCL

  7. Opencartモジュールのインストール、設定、アンインストールをアップロードし、OpenCart 3モジュール/拡張機能をインストール、構成、およびアンインストールする3つの方法を示します。

  8. Opencart 3のレイアウトと位置OpenCart 3のレイアウトと位置について説明します。カテゴリページの例を示しながら、さまざまなページのレイアウトをカスタマイズする方法を示します。カテゴリごとに異なるレイアウトを示します。

  9. Opencartのイベントの概要 OpenCartにはどのようなイベントがあるか、それらがどのように機能するか、何がイベントを非常に便利にするかを学びます。

  10. 開発者向けのOpencart APIドキュメントこのビデオでは、カスタムopencart APIの使用方法と作成方法を示します

これらのビデオを見たら、コーディングを開始できます:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.