カテゴリを操作する(ブログ・データベースプラグイン)
ここでは、ブログインスタンスやデータベースインスタンスにおけるカテゴリを、SDKから操作する方法について解説します。
カテゴリオブジェクトECHOContentsCategoryObject
ECHOContentsCategoryObjectは、カテゴリを操作するためのオブジェクトです。
オブジェクトを生成する
新しいカテゴリとしてオブジェクトを初期化するには、初期化メソッドの第一引数にブログインスタンスまたはデータベースインスタンスのIDを指定します。
ECHOContentsCategoryObject *category = [[ECHOContentsCategoryObject alloc] initWithInstanceId:@"インスタンスID"];
既存カテゴリとしてオブジェクトを初期化するには、初期化メソッドの第二引数にカテゴリIDを指定します。
ECHOContentsCategoryObject *category = [[ECHOContentsCategoryObject alloc] initWithInstanceId:@"インスタンスID" refid:@"カテゴリID"];
オブジェクトフィールド
カテゴリオブジェクトは、以下のフィールドを持ちます。
フィールド名 | 型 | 説明 | 可変 |
---|---|---|---|
refid | NSString | カテゴリID | ◯ |
name | NSString | カテゴリ名 | ◯ |
description | NSString | 概要 | ◯ |
keywords | NSString | キーワード | ◯ |
フィールドからデータを取得する
オブジェクトのフィールドからデータを取得する場合は、objectForKey:メソッドを使用します。
String *name = [category objectForKey:@"name"];
フィールドにデータをセットする
オブジェクトのフィールドにデータをセットするには、setObject:forKey:メソッドを使用します。
[category setObject:@"新しいカテゴリ" forKey:@"name"];
カテゴリを保存する
リモートサーバーへカテゴリを保存するには、push:メソッド(同期通信による保存)もしくはpushInBackgroundWithBlock:メソッド(非同期通信による保存)を使用します。
ECHOContentsCategoryObject *category = [[ECHOContentsCategoryObject alloc] initWithInstanceId:@"インスタンスID"];
[category setObject:@"新しいカテゴリ" forKey:@"name"]; // カテゴリ名をセット
[category setObject:@"category_xyz" forKey:@"refid"]; // カテゴリIDをセット
....
// 非同期でカテゴリを保存
[category pushInBackgroundWithBlock:^(NSError *e) {
if(e == null) { // 正常終了
NSLog(@"Complete: %@", category);
}else{ // 異常発生
NSLog(@"Error: %@", e);
}
}];
カテゴリを取得する
リモートサーバー上に存在するカテゴリを取得するには、fetch:メソッド(同期通信による取得)もしくはfetchInBackgroundWithBlock:メソッド(非同期通信による取得)を使用します。
ECHOContentsCategoryObject *category = [[ECHOContentsCategoryObject alloc] initWithInstanceId:@"インスタンスID" refid:@"カテゴリID"];
// 非同期でカテゴリを取得
[category fetchInBackgroundWithBlock:^(NSError *e) {
if(e == null) { // 正常終了
NSLog(@"Complete: %@", category);
}else{ // 異常発生
NSLog(@"Error: %@", e);
}
}];
カテゴリを削除する
リモートサーバー上に存在するカテゴリを削除するには、delete:メソッド(同期通信による削除)もしくはdeleteInBackgroundWithBlock:メソッド(非同期通信による削除)を使用します。
ECHOContentsCategoryObject *category = [[ECHOContentsCategoryObject alloc] initWithInstanceId:@"インスタンスID" refid:@"カテゴリID"];
// 非同期でカテゴリを削除
[category deleteInBackgroundWithBlock:^(NSError *e) {
if(e == null) { // 正常終了
NSLog(@"Complete");
}else{ // 異常発生
NSLog(@"Error: %@", e);
}
}];
現在のACLを取得する
オブジェクトに現在設定されているACLを取得するには、currentACLプロパティを使用します。
ECHOACLObject *current_acl = category.currentACL;
ACLを変更する
オブジェクトに新しいACLを設定するには、setNewACL:メソッドを使用します。
ECHOACLObject *new_acl = [[ECHOACLObject alloc] init]; // ACLオブジェクトを生成
[new_acl putEntryForAll: [[ECHOACLEntry alloc] initWithGet:NO list:NO edit:NO delete:NO] ]; // 例:非ログイン訪問者の操作権限を全て奪う
[category setNewACL:new_acl]; // 新しいACLをセット
[category push:nil]; // セットしたACLを反映させるには、最後に必ず保存を実行してください
カテゴリマップECHOContentsCategoriesMap
ECHOContentsCategoriesMapは、ツリー構造を持つカテゴリマップを再帰的に表現します。
オブジェクトを生成する
ルートから最下層までを含んだ全カテゴリマップとしてオブジェクトを初期化するには、初期化メソッドの第一引数にブログインスタンスまたはデータベースインスタンスのIDを指定します。
ECHOContentsCategoriesMap *categories_map = [[ECHOContentsCategoriesMap alloc] initWithInstanceId:@"インスタンスID"]; // 全カテゴリマップオブジェクトを生成
特定のカテゴリをルートにしたサブカテゴリマップとしてオブジェクトを初期化するには、初期化メソッドの第二引数にルートとなるカテゴリIDを指定します。
ECHOContentsCategoriesMap *categories_map = [[ECHOContentsCategoriesMap alloc] initWithInstanceId:@"インスタンスID" refid:@"カテゴリID"]; // サブカテゴリマップオブジェクトを生成
ルートカテゴリを取得する
カテゴリマップからルートカテゴリを取得するには、nodeプロパティを使用します。
子サブカテゴリマップを取得する
ルートカテゴリの下層に属するサブカテゴリマップ群を取得するには、childrenプロパティを使用します。
カテゴリマップを取得する
リモートサーバーからカテゴリマップを取得するには、fetch:メソッド(同期通信による取得)もしくはfetchInBackgroundWithBlock:メソッド(非同期通信による取得)を使用します。
// 非同期でカテゴリマップを取得
[categories_map fetchInBackgroundWithBlock:^(NSError *e) {
if(e == null) { // 正常終了
NSLog(@"Complete: %@", categories_map);
}else{ // 異常発生
NSLog(@"Error: %@", e);
}
}];
カテゴリの所属階層を変更する
カテゴリの所属階層を変更するには、カテゴリオブジェクトのsetNewParent:メソッドを使用します。
ECHOContentsCategoryObject *newParent = [[ECHOContentsCategoryObject alloc] initWithInstanceId:@"インスタンスID" refid:@"新しい親カテゴリID"];
[category setNewParent:newParent]; // 新しい親カテゴリをセット
[category push:nil]; // 反映させるには、最後に必ず保存を実行してください