最初に、ユーザーに対処し、記事を書く機会を与えたり、ユーザー自身のイベントを追加しましょう。
ユーザー登録
登録には、 ログインスニペットを使用します。
[[!Register? &postHooks=`addUser` &usergroups=`Users` &submittedResourceId=`9` &activationResourceId=`11` &activationEmailSubject=` ` &validate=`email:email:required`]]
スニペット自体について多くのことが書かれています。addUserフックが何をするかを示します。
スニペットaddUser
スニペットaddUser
<?php $output = ""; $parent = 2; $template = 3; // ( ) if ($id = $modx->runSnippet('addResource', array( 'pagetitle' => $hook->getValue('username'), 'parent' => $parent, 'template' => $template, 'isfolder' => 1, 'published' => 1, 'hidemenu' => 1 ))) { // id website // ( User Extended) $userId = $hook->getValue('register.user')->get('id'); $user = $modx->getObject('modUserProfile', array('id' => $userId)); $user->set('website',$id); $user->save(); // TV-, id $modx->runSnippet('tv', array('id' => $id, 'tv' => 1, 'value' => $userId)); $modx->cacheManager->refresh(); $output = $id; } else { print '<h1>Can not to create the new user</h1><p>Please, tell us about this</p><h2>Contacts</h2><p>E-mail: <a href="mailto:admin@site.ru">admin@site.ru</a></p>'; die(); } return $output;
スニペットaddResource
スニペットaddResource
<?php // POST if (!$pagetitle) $pagetitle = $_POST['title']; if (!$longtitle) $longtitle = $_POST['longtitle']; if (!$content) $content = $_POST['content']; if (!$introtext) $introtext = $_POST['introtext']; if (!$description) $description = $_POST['description']; if (!$parent) $parent = $_POST['parent']; if (!$isfolder) $isfolder = $_POST['isfolder']; if (!$hidemenu) $hidemenu = $_POST['hidemenu']; if (!$template) $template = $_POST['template']; if (!$menutitle) $menutitle = $_POST['menutitle']; if (!$published) $published = $_POST['published']; if (!$publishedon) $publishedon = date('Ymd H:i:s'); // , // if (!$parent) $parent = 1; if (!$template) $template = 1; // switch ($template) { case 1: $prefix = "art"; break; // case 2: $prefix = "id"; break; // case 3: $prefix = "id"; break; // case 4: $prefix = "event"; break; // case 5: $prefix = "animal"; break; // default: $prefix = "id"; break; } // $newResource = $modx->newObject('modResource'); // $newResource->set('pagetitle',$pagetitle); $newResource->set('longtitle',$longtitle); $newResource->set('description',$description); $newResource->set('introtext',$introtext); $newResource->set('content',$content); $newResource->set('menutitle',$menutitle); $newResource->set('template',$template); $newResource->set('isfolder',$isfolder); $newResource->set('hidemenu',$hidemenu); $newResource->set('parent',$parent); $newResource->set('published',$published); $newResource->set('alias',$parent.date('YmdHis')); if ($published) $newResource->set('publishedon',$publishedon); // if ($newResource->save()) { $id = $newResource->get('id'); $newResource->set('alias',$prefix.$id); $newResource->save(); // , $modx->cacheManager->refresh(); return $id; } return false;
スニペットテレビ
スニペットテレビ
<?php if ($input) { // TV id $q = $modx->newQuery('modTemplateVarResource'); $q->select(array('value', 'tmplvarid', 'contentid'))->where(array('tmplvarid'=>$options, 'contentid'=>$input)); $r = $modx->getObject('modTemplateVarResource', $q); return $r->value; } else { // TV if (!$id) {$id = $_POST['id'];} if (!$tv) $tv = $_POST['tv']; if (!$value) $value = $_POST['value']; if ($value == ' ') $value = ''; if ($modx->getObject('modTemplateVarResource', array('contentid' => $id, 'tmplvarid' => $tv))) { $tvar = $modx->getObject('modTemplateVarResource', array('contentid' => $id, 'tmplvarid' => $tv)); } else { $tvar = $modx->newObject('modTemplateVarResource'); $tvar->set('contentid', $id); $tvar->set('tmplvarid', $tv); } $tvar->set('value', $value); $tvar->save(); }
ユーザーが電子メールを確認した後、自分に関する情報を編集するためのページに移動します。
[[!FormIt? &hooks=`editUserPage` &successMessage=` `]] [[$editPage]]
したがって、 editUserPageスニペット
スニペットeditUserPage
スニペットeditUserPage
<?php // id $id = $modx->user->getOne('Profile')->get('website'); $name = $_POST['name']; if ($name == '') $name = ' '; // if ($modx->runSnippet('editResource',array('resId' => $id, 'pagetitle' => $name, 'longtitle' => $name, 'menutitle' => $name, 'hidemenu' => 'show'))) { foreach ($_POST as $key => $value) { switch ($key) { case 'com_address': $tv = 2; break; case 'com_egrul': $tv = 5; break; case 'com_email': $tv = 9; break; case 'com_federate': $tv = 4; break; case 'com_head': $tv = 10; break; case 'com_inn': $tv = 6; break; case 'com_kpp': $tv = 7; break; case 'com_phone': $tv = 3; break; case 'com_regon': $tv = 8; break; default: $tv = 0; break; } if (!$value) $value = ' '; if ($tv) $modx->runSnippet('tv', array('id' => $id, 'tv' => $tv, 'value' => $value)); } // , $modx->cacheManager->refresh(); return true; }
記事またはユーザーイベントを作成する
ユーザーが今後のイベントや過去のイベントをページに追加できるようにします。
[[!FormIt? &hooks=`addEvent` &successMessage=` ` &submitVar=`addEvent`]] [[$addEventForm]]
スニペットaddEvent
スニペットaddEvent
<?php // $parent = $modx->user->getOne('Profile')->get('website'); $name = $_POST['name']; $date = explode('.',$_POST['event_date']); $publishedon = $date[2]."-".$date[1]."-".$date[0]." 10:00:00"; $introtext = $_POST['description']; if ($id = $modx->runSnippet('addResource',array('pagetitle' => $name, 'longtitle' => $name, 'introtext' => $introtext, 'menutitle' => $name, 'published' => 1, 'publishedon' => $publishedon, 'parent' => $parent, 'template' => 4, 'isfolder' => 1))) { // , foreach ($_POST as $key => $value) { switch ($key) { case 'event_address': $tv = 14; break; case 'event_type': $tv = 12; break; case 'event_org': $tv = 34; break; case 'event_peoples': $tv = 24; break; default: $tv = 0; break; } if (!$value) $value = ' '; if ($tv) $modx->runSnippet('tv', array('id' => $id, 'tv' => $tv, 'value' => $value)); } $modx->cacheManager->refresh(); // $url = "/companies/id".$parent."/event".$id; header('location: '.$url); exit; return true; }
最後に
このサイトでは、ユーザーは登録、自分に関する情報の投稿、イベントの作成、記事の作成を行うことができます。
私はそれで何をするつもりですか
さらに、 Goobsが 書いたように、ユーザーが写真をアップロードしたり、個人的なメッセージを送受信する機能を追加したり、ユーザーが好きなイベントに登録したりできるようにする予定です。