プログラムから特定のユーザに対してトピック属性を追加したい

2017年7月4日 at 19:49

お世話になっております。

◆環境情報
# concrete5 Version
Core Version - 8.1.0
# Server Software
Apache/2.4.6 (CentOS 7) PHP/5.6.30

◆目的
プログラムから特定のユーザに対してユーザ属性のトピックを追加したい。

◆質問
上記の目的の通りなのですが、プログラム上から特定のユーザに対してトピック属性の追加を行いたいと考えております。
具体的には下記のメソッドを利用しているのですが、$value値に渡す配列の形式がわからないでおります。

ドキュメントでは文字列でもできるようなのですが、実際に文字列でトピックを渡すとエラーとなりました。
配列にして渡すとエラーは解消されるのですが、内容が間違っているようで属性の追加はされませんでした。
どのような配列で渡してやればよいのかご教示いただけると幸いです。


以下、concrete5 5.7 API のドキュメントより抜粋

http://documentation.concrete5.org/api/source-class-Concrete.Core.User.UserInfo.html#699-712
$ui->setAttribute(mixed $ak, $value)

/**
* Sets the attribute of a user info object to the specified value, and saves it in the database.
*
* @param UserAttributeKey|string $ak
* @param mixed $value
*/
public function setAttribute($ak, $value)
{
if (!is_object($ak)) {
$ak = UserAttributeKey::getByHandle($ak);
}
$ak->setAttribute($this, $value);
$this->reindex();
}


よろしくお願いいたします。

タグ:

Re: プログラムから特定のユーザに対してトピック属性を追加したい

2017年7月4日 at 22:32
一つ目の引数 $ak は UserAttributeKey クラスのインスタンスまたは文字列が渡せますが、文字列は属性ハンドルになります。値ではありません。値を渡すのは2つ目の引数 $value ですが、ドキュメントには mixed としか書かれていませんね?これは、属性タイプによって異なるためです。トピックの場合は \Concrete\Core\Tree\Node\Type\Topic クラスのインスタンスを渡す必要があります。配列である必要はありません。
 

Re: プログラムから特定のユーザに対してトピック属性を追加したい

2017年7月5日 at 9:56
お早いご教示ありがとうございます。
理解が乏しくお恥ずかしい限りです。
おかげ様で下記のような感じでトピック属性の更新ができました。ありがとうございました。

use Concrete\Core\Tree\Node\Type\Topic as TopicNode;

public function addTopic()
{
$u = new User();
$ui = UserInfo::getByID($u->getUserID());

// リセット
$ui->clearAttribute('属性ハンドル');

// セット
$tn = new TopicNode();
$ui->setAttribute('属性ハンドル', $tn->getNodeByName('トピック名'));
}