毎月、mautic meetup nagoya勉強会をベースキャンプ名古屋で開催しています。
7月の勉強会は【Mautic Meetup Nagoya #4 「Contacts は奥が深い」】というタイトルの勉強会で、コンタクト(旧称:リード)の使い方について学びました。
そこでconcrete5とmauticを連携させる簡単なデモを実施しましたので、実装方法を残しておきます。
Contents
やること
- concrete5のユーザ登録時にユーザ情報をmauticと連動させる
- 連動する情報は以下のとおり。
- メールアドレス( email )
- 姓( lastname )、名( firstname )
- 会社名( company )
- 連動する情報は以下のとおり。
concrete5は誰でも認証なしにユーザ登録出来る設定にしています。
mautic側の設定
mauticのコンタクトを外部から操作するには、コンタクトフィールドの設定が必要です。
1. 右上の歯車マークをクリックして「Custom Fields」を選択します。
2. First Nameを選択して詳細画面を開きます
3. 右側に表示されているPublicly updatable を「はい」に設定します
この設定をすることで外部からのコンタクトの設定値を更新出来るようになります。
4. 連携予定のその他のコンタクトフィールドも同様に設定します。
- メールアドレス( email )
- 姓( lastname )、名( firstname )
- 会社名( company )
concrete5側の設定
1. 誰でもユーザ登録できるようにします
2. ユーザ属性を追加します
3. ユーザ登録画面にトラッキングコードを挿入します
application/single_pages ディレクトリに、以下のファイル(register.php)をダウンロードします。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php defined('C5_EXECUTE') or die("Access Denied."); | |
$token = \Core::make('Concrete\Core\Validation\CSRF\Token'); | |
?> | |
<div class="row"> | |
<div class="col-sm-10 col-sm-offset-1"> | |
<div class="page-header"> | |
<h1><?php echo t('Site Registration')?></h1> | |
<p>Mauticとの連携を試みます!</p> | |
</div> | |
</div> | |
</div> | |
<?php | |
$attribs = UserAttributeKey::getRegistrationList(); | |
$ma_tag = ""; | |
if($registerSuccess) { ?> | |
<div class="row"> | |
<div class="col-sm-10 col-sm-offset-1"> | |
<?php switch($registerSuccess) { | |
case "registered": | |
?> | |
<p><strong><?php echo $successMsg ?></strong><br/><br/> | |
<a href="<?php echo $view->url('/')?>"><?php echo t('Return to Home')?></a></p> | |
<?php | |
break; | |
case "validate": | |
?> | |
<p><?php echo $successMsg[0] ?></p> | |
<p><?php echo $successMsg[1] ?></p> | |
<p><a href="<?php echo $view->url('/')?>"><?php echo t('Return to Home')?></a></p> | |
<?php | |
break; | |
case "pending": | |
?> | |
<p><?php echo $successMsg ?></p> | |
<p><a href="<?php echo $view->url('/')?>"><?php echo t('Return to Home')?></a></p> | |
<?php | |
break; | |
} | |
$u = new User(); | |
if (is_object($u) && $u->checkLogin()) { | |
$uinfo = UserInfo::getByID($u->uID); | |
$email = $uinfo->getUserEmail(); | |
$first_name = $uinfo->getAttribute("first_name"); | |
$last_name = $uinfo->getAttribute("last_name"); | |
$company = $uinfo->getAttribute("company"); | |
$ma_tag = "{email: '" . $email . "', firstname: '" . $first_name . "', lastname: '" . $last_name . "', company: '" . $company . "'}"; | |
} | |
?> | |
</div> | |
</div> | |
<?php | |
} else { ?> | |
<form method="post" action="<?php echo $view->url('/register', 'do_register')?>" class="form-stacked"> | |
<?php $token->output('register.do_register') ?> | |
<div class="row"> | |
<div class="col-sm-10 col-sm-offset-1"> | |
<fieldset> | |
<legend><?php echo t('Your Details')?></legend> | |
<?php | |
if ($displayUserName) { | |
?> | |
<div class="form-group"> | |
<?php echo $form->label('uName',t('Username'))?> | |
<?php echo $form->text('uName')?> | |
</div> | |
<?php | |
} | |
?> | |
<div class="form-group"> | |
<?php echo $form->label('uEmail',t('Email Address'))?> | |
<?php echo $form->text('uEmail')?> | |
</div> | |
<div class="form-group"> | |
<?php echo $form->label('uPassword',t('Password'))?> | |
<?php echo $form->password('uPassword',array('autocomplete' => 'off'))?> | |
</div> | |
<div class="form-group"> | |
<?php echo $form->label('uPasswordConfirm',t('Confirm Password'))?> | |
<?php echo $form->password('uPasswordConfirm',array('autocomplete' => 'off'))?> | |
</div> | |
</fieldset> | |
</div> | |
</div> | |
<?php | |
if (count($attribs) > 0) { | |
?> | |
<div class="row"> | |
<div class="col-sm-10 col-sm-offset-1"> | |
<fieldset> | |
<legend><?php echo t('Options')?></legend> | |
<?php | |
$af = Loader::helper('form/attribute'); | |
foreach($attribs as $ak) { | |
echo $af->display($ak, $ak->isAttributeKeyRequiredOnRegister()); | |
} | |
?> | |
</fieldset> | |
</div> | |
</div> | |
<?php | |
} | |
if (Config::get('concrete.user.registration.captcha')) { | |
?> | |
<div class="row"> | |
<div class="col-sm-10 col-sm-offset-1 "> | |
<div class="form-group"> | |
<?php | |
$captcha = Loader::helper('validation/captcha'); | |
echo $captcha->label(); | |
?> | |
<?php | |
$captcha->showInput(); | |
$captcha->display(); | |
?> | |
</div> | |
</div> | |
</div> | |
<?php } ?> | |
<div class="row"> | |
<div class="col-sm-10 col-sm-offset-1"> | |
<div class="form-actions"> | |
<?php echo $form->hidden('rcID', $rcID); ?> | |
<?php echo $form->submit('register', t('Register') . ' >', array('class' => 'btn-lg btn-primary'))?> | |
</div> | |
</div> | |
</div> | |
</form> | |
<?php | |
} | |
?> | |
<script> | |
(function(w,d,t,u,n,a,m){w['MauticTrackingObject']=n; | |
w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},a=d.createElement(t), | |
m=d.getElementsByTagName(t)[0];a.async=1;a.src=u;m.parentNode.insertBefore(a,m) | |
})(window,document,'script','http://example.com/mtc.js','mt'); | |
<?php if( $ma_tag ) : ?> | |
mt('send', 'pageview', <?php echo $ma_tag; ?>); | |
<?php else: ?> | |
mt('send', 'pageview'); | |
<?php endif; ?> | |
</script> |
register.php の以下の部分を自身のURLに変更します。
1 | http://example.com/mtc.js |
ソースの簡単に説明
以下の部分で登録完了した方の情報をトラッキングコードに含めています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | $ma_tag = ""; if($registerSuccess) { ?> ~ 中略 ~ $u = new User(); if (is_object($u) && $u->checkLogin()) { $uinfo = UserInfo::getByID($u->uID); $email = $uinfo->getUserEmail(); $first_name = $uinfo->getAttribute("first_name"); $last_name = $uinfo->getAttribute("last_name"); $company = $uinfo->getAttribute("company"); $ma_tag = "{email: '" . $email . "', firstname: '" . $first_name . "', lastname: '" . $last_name . "', company: '" . $company . "'}"; } ~ 中略 ~ } ~ 中略 ~ ?> ~ 中略 ~ // ココでトラッキングコードを出力(登録完了したユーザは、登録情報も含めて送信する) <script> (function(w,d,t,u,n,a,m){w['MauticTrackingObject']=n; w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},a=d.createElement(t), m=d.getElementsByTagName(t)[0];a.async=1;a.src=u;m.parentNode.insertBefore(a,m) })(window,document,'script','http://example.com/mtc.js','mt'); <?php if( $ma_tag ) : ?> mt('send', 'pageview', <?php echo $ma_tag; ?>); <?php else: ?> mt('send', 'pageview'); <?php endif; ?> </script> ~ 中略 ~ |
以上でユーザ登録をしてくれた方を、mautic に連携出来るようになります。
「【mautic】concrete5のユーザ登録時にmauticのコンタクトに登録する方法」への1件のフィードバック