X

【mautic】concrete5のユーザ登録時にmauticのコンタクトに登録する方法

毎月、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)をダウンロードします。

 

gist – 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
Show hidden 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') . ' &gt;', 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>
view raw

register.php

hosted with ❤ by GitHub

register.php の以下の部分を自身のURLに変更します。

http://example.com/mtc.js

ソースの簡単に説明

以下の部分で登録完了した方の情報をトラッキングコードに含めています。

$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 に連携出来るようになります。

View Comments (0)