本文整理汇总了PHP中OffsetLimit函数的典型用法代码示例。如果您正苦于以下问题:PHP OffsetLimit函数的具体用法?PHP OffsetLimit怎么用?PHP OffsetLimit使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了OffsetLimit函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: DiscussionsController_Participated_Create
public function DiscussionsController_Participated_Create(&$Sender, $Args)
{
$Sender->Permission('Garden.SignIn.Allow');
$Page = GetValue(0, $Args);
$Limit = GetValue(1, $Args);
list($Offset, $Limit) = OffsetLimit($Page, Gdn::Config('Vanilla.Discussions.PerPage', 30));
// Get Discussions
$DiscussionModel = new DiscussionModel();
$Sender->DiscussionData = $DiscussionModel->GetParticipated(Gdn::Session()->UserID, $Offset, $Limit);
$Sender->SetData('Discussions', $Sender->DiscussionData);
$CountDiscussions = $DiscussionModel->GetCountParticipated(Gdn::Session()->UserID);
$Sender->SetData('CountDiscussions', $CountDiscussions);
// Build a pager
$PagerFactory = new Gdn_PagerFactory();
$Sender->EventArguments['PagerType'] = 'Pager';
$Sender->FireEvent('BeforeBuildPager');
$Sender->Pager = $PagerFactory->GetPager($Sender->EventArguments['PagerType'], $Sender);
$Sender->Pager->ClientID = 'Pager';
$Sender->Pager->Configure($Offset, $Limit, $CountDiscussions, 'discussions/participated/%1$s');
$Sender->FireEvent('AfterBuildPager');
// Deliver JSON data if necessary
if ($Sender->DeliveryType() != DELIVERY_TYPE_ALL) {
$Sender->SetJson('LessRow', $Sender->Pager->ToString('less'));
$Sender->SetJson('MoreRow', $Sender->Pager->ToString('more'));
$Sender->View = 'discussions';
}
// Add modules
$Sender->AddModule('NewDiscussionModule');
$Sender->AddModule('CategoriesModule');
$BookmarkedModule = new BookmarkedModule($Sender);
$BookmarkedModule->GetData();
$Sender->AddModule($BookmarkedModule);
$Sender->Render($this->GetView('participated.php'));
}
示例2: DiscussionsController_Tagged_Create
/**
* Load discussions for a specific tag.
*/
public function DiscussionsController_Tagged_Create($Sender)
{
$Offset = GetValue('1', $Sender->RequestArgs, 'p1');
list($Offset, $Limit) = OffsetLimit($Offset, Gdn::Config('Vanilla.Discussions.PerPage', 30));
$Sender->Tag = GetValue('0', $Sender->RequestArgs, '');
$Sender->Title(T('Tagged with ') . $Sender->Tag);
$Sender->Head->Title($Sender->Head->Title());
$Sender->CanonicalUrl(Url(ConcatSep('/', 'discussions/tagged/' . $Sender->Tag, PageNumber($Offset, $Limit, TRUE)), TRUE));
if ($Sender->Head) {
$Sender->AddJsFile('discussions.js');
$Sender->AddJsFile('bookmark.js');
$Sender->AddJsFile('js/library/jquery.menu.js');
$Sender->AddJsFile('options.js');
$Sender->Head->AddRss($Sender->SelfUrl . '/feed.rss', $Sender->Head->Title());
}
if (!is_numeric($Offset) || $Offset < 0) {
$Offset = 0;
}
// Add Modules
$Sender->AddModule('NewDiscussionModule');
$BookmarkedModule = new BookmarkedModule($Sender);
$BookmarkedModule->GetData();
$Sender->AddModule($BookmarkedModule);
$Sender->SetData('Category', FALSE, TRUE);
$DiscussionModel = new DiscussionModel();
$Tag = $DiscussionModel->SQL->Select()->From('Tag')->Where('Name', $Sender->Tag)->Get()->FirstRow();
$TagID = $Tag ? $Tag->TagID : 0;
$CountDiscussions = $Tag ? $Tag->CountDiscussions : 0;
$Sender->SetData('CountDiscussions', $CountDiscussions);
$Sender->AnnounceData = FALSE;
$Sender->SetData('Announcements', array(), TRUE);
$DiscussionModel->FilterToTagID = $TagID;
$Sender->DiscussionData = $DiscussionModel->Get($Offset, $Limit);
$Sender->SetData('Discussions', $Sender->DiscussionData, TRUE);
$Sender->SetJson('Loading', $Offset . ' to ' . $Limit);
// Build a pager.
$PagerFactory = new Gdn_PagerFactory();
$Sender->Pager = $PagerFactory->GetPager('Pager', $Sender);
$Sender->Pager->ClientID = 'Pager';
$Sender->Pager->Configure($Offset, $Limit, $CountDiscussions, 'discussions/tagged/' . $Sender->Tag . '/%1$s');
// Deliver json data if necessary
if ($Sender->DeliveryType() != DELIVERY_TYPE_ALL) {
$Sender->SetJson('LessRow', $Sender->Pager->ToString('less'));
$Sender->SetJson('MoreRow', $Sender->Pager->ToString('more'));
$Sender->View = 'discussions';
}
// Set a definition of the user's current timezone from the db. jQuery
// will pick this up, compare to the browser, and update the user's
// timezone if necessary.
$CurrentUser = Gdn::Session()->User;
if (is_object($CurrentUser)) {
$ClientHour = $CurrentUser->HourOffset + date('G', time());
$Sender->AddDefinition('SetClientHour', $ClientHour);
}
// Render the controller
$Sender->Render(PATH_PLUGINS . '/Tagging/views/taggeddiscussions.php');
}
示例3: Index
/**
* Default search functionality.
*
* @since 2.0.0
* @access public
* @param int $Page Page number.
*/
public function Index($Page = '')
{
$this->AddJsFile('search.js');
$this->Title(T('Search'));
SaveToConfig('Garden.Format.EmbedSize', '160x90', FALSE);
Gdn_Theme::Section('SearchResults');
list($Offset, $Limit) = OffsetLimit($Page, C('Garden.Search.PerPage', 20));
$this->SetData('_Limit', $Limit);
$Search = $this->Form->GetFormValue('Search');
$Mode = $this->Form->GetFormValue('Mode');
if ($Mode) {
$this->SearchModel->ForceSearchMode = $Mode;
}
try {
$ResultSet = $this->SearchModel->Search($Search, $Offset, $Limit);
} catch (Gdn_UserException $Ex) {
$this->Form->AddError($Ex);
$ResultSet = array();
} catch (Exception $Ex) {
LogException($Ex);
$this->Form->AddError($Ex);
$ResultSet = array();
}
Gdn::UserModel()->JoinUsers($ResultSet, array('UserID'));
// Fix up the summaries.
$SearchTerms = explode(' ', Gdn_Format::Text($Search));
foreach ($ResultSet as &$Row) {
$Row['Summary'] = SearchExcerpt(Gdn_Format::PlainText($Row['Summary'], $Row['Format']), $SearchTerms);
$Row['Summary'] = Emoji::instance()->translateToHtml($Row['Summary']);
$Row['Format'] = 'Html';
}
$this->SetData('SearchResults', $ResultSet, TRUE);
$this->SetData('SearchTerm', Gdn_Format::Text($Search), TRUE);
if ($ResultSet) {
$NumResults = count($ResultSet);
} else {
$NumResults = 0;
}
if ($NumResults == $Offset + $Limit) {
$NumResults++;
}
// Build a pager
$PagerFactory = new Gdn_PagerFactory();
$this->Pager = $PagerFactory->GetPager('MorePager', $this);
$this->Pager->MoreCode = 'More Results';
$this->Pager->LessCode = 'Previous Results';
$this->Pager->ClientID = 'Pager';
$this->Pager->Configure($Offset, $Limit, $NumResults, 'dashboard/search/%1$s/%2$s/?Search=' . Gdn_Format::Url($Search));
// if ($this->_DeliveryType != DELIVERY_TYPE_ALL) {
// $this->SetJson('LessRow', $this->Pager->ToString('less'));
// $this->SetJson('MoreRow', $this->Pager->ToString('more'));
// $this->View = 'results';
// }
$this->CanonicalUrl(Url('search', TRUE));
$this->Render();
}
示例4: Index
/**
* Default all discussions view: chronological by most recent comment.
*
* @since 2.0.0
* @access public
*
* @param int $Page Multiplied by PerPage option to determine offset.
*/
public function Index($Page = '0')
{
// Determine offset from $Page
list($Page, $Limit) = OffsetLimit($Page, Gdn::Config('Vanilla.Discussions.PerPage', 30));
$this->CanonicalUrl(Url(ConcatSep('/', 'discussions', PageNumber($Page, $Limit, TRUE)), TRUE));
// Validate $Page
if (!is_numeric($Page) || $Page < 0) {
$Page = 0;
}
// Setup head
$this->Title(T('All Discussions'));
if ($this->Head) {
$this->Head->AddRss(Url('/discussions/feed.rss', TRUE), $this->Head->Title());
}
// Add modules
$this->AddModule('NewDiscussionModule');
$this->AddModule('CategoriesModule');
$BookmarkedModule = new BookmarkedModule($this);
$BookmarkedModule->GetData();
$this->AddModule($BookmarkedModule);
// Set criteria & get discussions data
$this->SetData('Category', FALSE, TRUE);
$DiscussionModel = new DiscussionModel();
$CountDiscussions = $DiscussionModel->GetCount();
$this->SetData('CountDiscussions', $CountDiscussions);
$this->AnnounceData = $Page == 0 ? $DiscussionModel->GetAnnouncements() : FALSE;
$this->SetData('Announcements', $this->AnnounceData !== FALSE ? $this->AnnounceData : array(), TRUE);
$this->DiscussionData = $DiscussionModel->Get($Page, $Limit);
$this->SetData('Discussions', $this->DiscussionData, TRUE);
$this->SetJson('Loading', $Page . ' to ' . $Limit);
// Build a pager
$PagerFactory = new Gdn_PagerFactory();
$this->EventArguments['PagerType'] = 'Pager';
$this->FireEvent('BeforeBuildPager');
$this->Pager = $PagerFactory->GetPager($this->EventArguments['PagerType'], $this);
$this->Pager->ClientID = 'Pager';
$this->Pager->Configure($Page, $Limit, $CountDiscussions, 'discussions/%1$s');
$this->FireEvent('AfterBuildPager');
// Deliver JSON data if necessary
if ($this->_DeliveryType != DELIVERY_TYPE_ALL) {
$this->SetJson('LessRow', $this->Pager->ToString('less'));
$this->SetJson('MoreRow', $this->Pager->ToString('more'));
$this->View = 'discussions';
}
// Set a definition of the user's current timezone from the db. jQuery
// will pick this up, compare to the browser, and update the user's
// timezone if necessary.
$CurrentUser = Gdn::Session()->User;
if (is_object($CurrentUser)) {
$ClientHour = $CurrentUser->HourOffset + date('G', time());
$this->AddDefinition('SetClientHour', $ClientHour);
}
// Render default view (discussions/index.php)
$this->Render();
}
示例5: Index
/**
* User management list.
*
* @since 2.0.0
* @access public
* @param mixed $Keywords Term or array of terms to filter list of users.
* @param int $Page Page number.
* @param string $Order Sort order for list.
*/
public function Index($Keywords = '', $Page = '', $Order = '')
{
$this->Permission(array('Garden.Users.Add', 'Garden.Users.Edit', 'Garden.Users.Delete'), '', FALSE);
// Page setup
$this->AddJsFile('jquery.gardenmorepager.js');
$this->AddJsFile('user.js');
$this->Title(T('Users'));
$this->AddSideMenu('dashboard/user');
// Form setup
$this->Form->Method = 'get';
// Input Validation.
list($Offset, $Limit) = OffsetLimit($Page, PagerModule::$DefaultPageSize);
if (!$Keywords) {
$Keywords = $this->Form->GetFormValue('Keywords');
if ($Keywords) {
$Offset = 0;
}
}
if (!is_string($Keywords)) {
$Keywords = '';
}
// Put the Keyword back in the form
if ($Keywords) {
$this->Form->SetFormValue('Keywords', $Keywords);
}
$UserModel = new UserModel();
//$Like = trim($Keywords) == '' ? FALSE : array('u.Name' => $Keywords, 'u.Email' => $Keywords);
list($Offset, $Limit) = OffsetLimit($Page, 30);
$Filter = $this->_GetFilter();
if ($Filter) {
$Filter['Keywords'] = $Keywords;
} else {
$Filter = $Keywords;
}
$this->SetData('RecordCount', $UserModel->SearchCount($Filter));
// Sorting
if (in_array($Order, array('DateInserted', 'DateFirstVisit', 'DateLastActive'))) {
$Order = 'u.' . $Order;
$OrderDir = 'desc';
} else {
$Order = 'u.Name';
$OrderDir = 'asc';
}
// Get user list
$this->UserData = $UserModel->Search($Filter, $Order, $OrderDir, $Limit, $Offset);
$this->SetData('Users', $this->UserData);
RoleModel::SetUserRoles($this->UserData->Result());
// Deliver json data if necessary
if ($this->_DeliveryType != DELIVERY_TYPE_ALL && $this->_DeliveryMethod == DELIVERY_METHOD_XHTML) {
$this->SetJson('LessRow', $this->Pager->ToString('less'));
$this->SetJson('MoreRow', $this->Pager->ToString('more'));
$this->View = 'users';
}
$this->Render();
}
示例6: Settings
/**
* Manage the current badges and add new ones
*
* @param int $Page
*/
public function Settings($Page = '')
{
$this->Permission('Yaga.Badges.Manage');
$this->AddSideMenu('badge/settings');
$this->Title(T('Yaga.Badges.Manage'));
// Get list of badges from the model and pass to the view
list($Offset, $Limit) = OffsetLimit($Page, PagerModule::$DefaultPageSize);
$this->SetData('Badges', $this->BadgeModel->GetLimit($Limit, $Offset));
$this->SetData('Rules', RulesController::GetRules());
$this->Render();
}
示例7: Index
public function Index($Keywords = '', $Page = '') {
$this->Permission(
array(
'Garden.Users.Add',
'Garden.Users.Edit',
'Garden.Users.Delete'
),
'',
FALSE
);
$this->AddJsFile('jquery.gardenmorepager.js');
$this->AddJsFile('user.js');
$this->Title(T('Users'));
$this->AddSideMenu('dashboard/user');
$this->Form->Method = 'get';
// Input Validation.
list($Offset, $Limit) = OffsetLimit($Page, PagerModule::$DefaultPageSize);
if (!$Keywords) {
$Keywords = $this->Form->GetFormValue('Keywords');
if ($Keywords)
$Offset = 0;
}
// Put the Keyword back in the form
if ($Keywords)
$this->Form->SetFormValue('Keywords', $Keywords);
$UserModel = new UserModel();
//$Like = trim($Keywords) == '' ? FALSE : array('u.Name' => $Keywords, 'u.Email' => $Keywords);
list($Offset, $Limit) = OffsetLimit($Page, 30);
$Filter = $this->_GetFilter();
if ($Filter)
$Filter['Keywords'] = $Keywords;
else
$Filter = $Keywords;
$this->SetData('RecordCount', $UserModel->SearchCount($Filter));
$this->UserData = $UserModel->Search($Filter, 'u.Name', 'asc', $Limit, $Offset);
RoleModel::SetUserRoles($this->UserData->Result());
// Deliver json data if necessary
if ($this->_DeliveryType != DELIVERY_TYPE_ALL) {
$this->SetJson('LessRow', $this->Pager->ToString('less'));
$this->SetJson('MoreRow', $this->Pager->ToString('more'));
$this->View = 'users';
}
$this->Render();
}
示例8: Browse
public function Browse($Page = '')
{
$this->Permission('Candy.Settings.View');
list($Offset, $Limit) = OffsetLimit($Page, 30);
$this->Chunks = $this->ChunkModel->Get('', $Offset, $Limit, 'DateUpdated');
$this->RecordCount = $this->ChunkModel->GetCount();
$this->Url = '/candy/chunk/browse/%s';
$this->Pager = new PagerModule($this);
$this->Pager->Configure($Offset, $Limit, $this->RecordCount, $this->Url);
$this->Title(T('Chunks'));
$this->Render();
}
示例9: Browse
public function Browse($Page = '')
{
$this->Permission('Candy.Settings.View');
list($Offset, $Limit) = OffsetLimit($Page, 100);
$this->Pages = $this->PageModel->Get(array('WithSection' => False), $Offset, $Limit, 'p.DateUpdated');
$this->RecordCount = $this->PageModel->GetCount();
$this->Url = '/candy/page/browse/%s';
$this->Pager = new PagerModule($this);
$this->Pager->Configure($Offset, $Limit, $this->RecordCount, $this->Url);
$this->Title(T('Pages'));
$this->Render();
}
示例10: Index
public function Index($Offset = '0')
{
list($Offset, $Limit) = OffsetLimit($Offset, Gdn::Config('Vanilla.Discussions.PerPage', 30));
$this->CanonicalUrl(Url(ConcatSep('/', 'discussions', PageNumber($Offset, $Limit, TRUE)), TRUE));
$this->Title(T('All Discussions'));
if ($this->Head) {
$this->Head->AddRss($this->SelfUrl . '/feed.rss', $this->Head->Title());
}
if (!is_numeric($Offset) || $Offset < 0) {
$Offset = 0;
}
// Add Modules
$this->AddModule('NewDiscussionModule');
$this->AddModule('CategoriesModule');
$BookmarkedModule = new BookmarkedModule($this);
$BookmarkedModule->GetData();
$this->AddModule($BookmarkedModule);
$this->SetData('Category', FALSE, TRUE);
$DiscussionModel = new DiscussionModel();
$CountDiscussions = $DiscussionModel->GetCount();
$this->SetData('CountDiscussions', $CountDiscussions);
$this->AnnounceData = $Offset == 0 ? $DiscussionModel->GetAnnouncements() : FALSE;
$this->SetData('Announcements', $this->AnnounceData !== FALSE ? $this->AnnounceData : array(), TRUE);
$this->DiscussionData = $DiscussionModel->Get($Offset, $Limit);
$this->SetData('Discussions', $this->DiscussionData, TRUE);
$this->SetJson('Loading', $Offset . ' to ' . $Limit);
// Build a pager.
$PagerFactory = new Gdn_PagerFactory();
$this->Pager = $PagerFactory->GetPager('Pager', $this);
$this->Pager->ClientID = 'Pager';
$this->Pager->Configure($Offset, $Limit, $CountDiscussions, 'discussions/%1$s');
// Deliver json data if necessary
if ($this->_DeliveryType != DELIVERY_TYPE_ALL) {
$this->SetJson('LessRow', $this->Pager->ToString('less'));
$this->SetJson('MoreRow', $this->Pager->ToString('more'));
$this->View = 'discussions';
}
// Set a definition of the user's current timezone from the db. jQuery
// will pick this up, compare to the browser, and update the user's
// timezone if necessary.
$CurrentUser = Gdn::Session()->User;
if (is_object($CurrentUser)) {
$ClientHour = $CurrentUser->HourOffset + date('G', time());
$this->AddDefinition('SetClientHour', $ClientHour);
}
// Render the controller
$this->Render();
}
示例11: Index
/**
* Default search functionality.
*
* @since 2.0.0
* @access public
* @param int $Page Page number.
*/
public function Index($Page = '')
{
$this->AddJsFile('jquery.gardenmorepager.js');
$this->AddJsFile('search.js');
$this->Title(T('Search'));
list($Offset, $Limit) = OffsetLimit($Page, C('Garden.Search.PerPage', 20));
$this->SetData('_Limit', $Limit);
$Search = $this->Form->GetFormValue('Search');
$Mode = $this->Form->GetFormValue('Mode');
if ($Mode) {
$this->SearchModel->ForceSearchMode = $Mode;
}
try {
$ResultSet = $this->SearchModel->Search($Search, $Offset, $Limit);
} catch (Gdn_UserException $Ex) {
$this->Form->AddError($Ex);
$ResultSet = array();
} catch (Exception $Ex) {
$this->Form->AddError($Ex);
$ResultSet = array();
}
Gdn::UserModel()->JoinUsers($ResultSet, array('UserID'));
$this->SetData('SearchResults', $ResultSet, TRUE);
$this->SetData('SearchTerm', Gdn_Format::Text($Search), TRUE);
if ($ResultSet) {
$NumResults = count($ResultSet);
} else {
$NumResults = 0;
}
if ($NumResults == $Offset + $Limit) {
$NumResults++;
}
// Build a pager
$PagerFactory = new Gdn_PagerFactory();
$this->Pager = $PagerFactory->GetPager('MorePager', $this);
$this->Pager->MoreCode = 'More Results';
$this->Pager->LessCode = 'Previous Results';
$this->Pager->ClientID = 'Pager';
$this->Pager->Configure($Offset, $Limit, $NumResults, 'dashboard/search/%1$s/%2$s/?Search=' . Gdn_Format::Url($Search));
if ($this->_DeliveryType != DELIVERY_TYPE_ALL) {
$this->SetJson('LessRow', $this->Pager->ToString('less'));
$this->SetJson('MoreRow', $this->Pager->ToString('more'));
$this->View = 'results';
}
$this->CanonicalUrl(Url('search', TRUE));
$this->Render();
}
示例12: SettingsController_Tagging_Create
/**
* List all tags and allow searching
*
* @param SettingsController $Sender
*/
public function SettingsController_Tagging_Create($Sender, $Search = NULL, $Type = NULL, $Page = NULL)
{
$Sender->Title('Tagging');
$Sender->AddSideMenu('settings/tagging');
$Sender->AddCSSFile('plugins/Tagging/design/tagadmin.css');
$Sender->AddJSFile('plugins/Tagging/js/admin.js');
$SQL = Gdn::SQL();
// Get all tag types
$TagModel = TagModel::instance();
$TagTypes = $TagModel->getTagTypes();
$Sender->Form->Method = 'get';
$Sender->Form->InputPrefix = '';
list($Offset, $Limit) = OffsetLimit($Page, 100);
$Sender->SetData('_Limit', $Limit);
if ($Search) {
$SQL->Like('FullName', $Search, 'right');
}
// This type doesn't actually exist, but it will represent the
// blank types in the column.
if (strtolower($Type) == 'tags') {
$Type = '';
}
if (!$Search) {
if ($Type !== NULL) {
if ($Type === 'null') {
$Type = NULL;
}
$SQL->Where('Type', $Type);
} else {
if ($Type == '') {
$SQL->Where('Type', '');
}
}
} else {
$Type = 'Search Results';
// This is made up, and exists so search results can be placed in
// their own tab.
$TagTypes[$Type] = array('key' => $Type);
}
$TagTypes = array_change_key_case($TagTypes, CASE_LOWER);
// Store type for view
$TagType = !empty($Type) ? $Type : 'Tags';
$Sender->SetData('_TagType', $TagType);
// Store tag types
$Sender->SetData('_TagTypes', $TagTypes);
// Determine if new tags can be added for the current type.
$CanAddTags = !empty($TagTypes[$Type]['addtag']) && $TagTypes[$Type]['addtag'] ? 1 : 0;
$Sender->SetData('_CanAddTags', $CanAddTags);
$Data = $SQL->Select('t.*')->From('Tag t')->OrderBy('t.FullName', 'asc')->OrderBy('t.CountDiscussions', 'desc')->Limit($Limit, $Offset)->Get()->ResultArray();
$Sender->SetData('Tags', $Data);
if ($Search) {
$SQL->Like('Name', $Search, 'right');
}
// Make sure search uses its own search type, so results appear
// in their own tab.
$Sender->Form->Action = Url('/settings/tagging/?type=' . $TagType);
// Search results pagination will mess up a bit, so don't provide a type
// in the count.
$RecordCountWhere = array('Type' => $Type);
if ($Type == '') {
$RecordCountWhere = array('Type' => '');
}
if ($Search) {
$RecordCountWhere = array();
}
$Sender->SetData('RecordCount', $SQL->GetCount('Tag', $RecordCountWhere));
$Sender->Render('tagging', '', 'plugins/Tagging');
}
示例13: Embed
/**
* Alternate version of Index that uses the embed master view.
*
* @param int $DiscussionID Unique identifier, if discussion has been created.
* @param string $DiscussionStub Deprecated.
* @param int $Offset
* @param int $Limit
*/
public function Embed($DiscussionID = '', $DiscussionStub = '', $Offset = '', $Limit = '')
{
$this->Title(T('Comments'));
// Add theme data
$this->Theme = C('Garden.CommentsTheme', $this->Theme);
Gdn_Theme::Section('Comments');
// Force view options
$this->MasterView = 'empty';
$this->CanEditComments = FALSE;
// Don't show the comment checkboxes on the embed comments page
// Add some css to help with the transparent bg on embedded comments
if ($this->Head) {
$this->Head->AddString('<style type="text/css">
body { background: transparent !important; }
</style>');
}
// Javascript files & options
$this->AddJsFile('jquery.gardenmorepager.js');
$this->AddJsFile('jquery.autogrow.js');
$this->RemoveJsFile('autosave.js');
$this->AddJsFile('discussion.js');
$this->AddDefinition('DoInform', '0');
// Suppress inform messages on embedded page.
$this->AddDefinition('SelfUrl', Gdn::Request()->PathAndQuery());
$this->AddDefinition('Embedded', TRUE);
// Define incoming variables (prefer querystring parameters over method parameters)
$DiscussionID = is_numeric($DiscussionID) && $DiscussionID > 0 ? $DiscussionID : 0;
$DiscussionID = GetIncomingValue('vanilla_discussion_id', $DiscussionID);
$Offset = GetIncomingValue('Offset', $Offset);
$Limit = GetIncomingValue('Limit', $Limit);
$vanilla_identifier = GetIncomingValue('vanilla_identifier', '');
// Only allow vanilla identifiers of 32 chars or less - md5 if larger
if (strlen($vanilla_identifier) > 32) {
$vanilla_identifier = md5($vanilla_identifier);
}
$vanilla_type = GetIncomingValue('vanilla_type', 'page');
$vanilla_url = GetIncomingValue('vanilla_url', '');
$vanilla_category_id = GetIncomingValue('vanilla_category_id', '');
$ForeignSource = array('vanilla_identifier' => $vanilla_identifier, 'vanilla_type' => $vanilla_type, 'vanilla_url' => $vanilla_url, 'vanilla_category_id' => $vanilla_category_id);
$this->SetData('ForeignSource', $ForeignSource);
// Set comment sorting
$SortComments = C('Garden.Embed.SortComments') == 'desc' ? 'desc' : 'asc';
$this->SetData('SortComments', $SortComments);
// Retrieve the discussion record
$Discussion = FALSE;
if ($DiscussionID > 0) {
$Discussion = $this->DiscussionModel->GetID($DiscussionID);
} else {
if ($vanilla_identifier != '' && $vanilla_type != '') {
$Discussion = $this->DiscussionModel->GetForeignID($vanilla_identifier, $vanilla_type);
}
}
// Set discussion data if we have one for this page
if ($Discussion) {
$this->Permission('Vanilla.Discussions.View', TRUE, 'Category', $Discussion->PermissionCategoryID);
$this->SetData('Discussion', $Discussion, TRUE);
$this->SetData('DiscussionID', $Discussion->DiscussionID, TRUE);
$this->Title($Discussion->Name);
// Actual number of comments, excluding the discussion itself
$ActualResponses = $Discussion->CountComments;
// Define the query offset & limit
if (!is_numeric($Limit) || $Limit < 0) {
$Limit = C('Garden.Embed.CommentsPerPage', 30);
}
$OffsetProvided = $Offset != '';
list($Offset, $Limit) = OffsetLimit($Offset, $Limit);
$this->Offset = $Offset;
if (C('Vanilla.Comments.AutoOffset')) {
if ($ActualResponses <= $Limit) {
$this->Offset = 0;
}
if ($this->Offset == $ActualResponses) {
$this->Offset -= $Limit;
}
} else {
if ($this->Offset == '') {
$this->Offset = 0;
}
}
if ($this->Offset < 0) {
$this->Offset = 0;
}
// Set the canonical url to have the proper page title.
$this->CanonicalUrl(DiscussionUrl($Discussion, PageNumber($this->Offset, $Limit)));
// Load the comments.
$CurrentOrderBy = $this->CommentModel->OrderBy();
if (StringBeginsWith(GetValueR('0.0', $CurrentOrderBy), 'c.DateInserted')) {
$this->CommentModel->OrderBy('c.DateInserted ' . $SortComments);
}
// allow custom sort
$this->SetData('Comments', $this->CommentModel->Get($Discussion->DiscussionID, $Limit, $this->Offset), TRUE);
if (count($this->CommentModel->Where()) > 0) {
//.........这里部分代码省略.........
示例14: Index
/**
* Show all discussions in a particular category.
*
* @since 2.0.0
* @access public
*
* @param string $CategoryIdentifier Unique category slug or ID.
* @param int $Offset Number of discussions to skip.
*/
public function Index($CategoryIdentifier = '', $Page = '0')
{
if ($CategoryIdentifier == '') {
// Figure out which category layout to choose (Defined on "Homepage" settings page).
$Layout = C('Vanilla.Categories.Layout');
switch ($Layout) {
case 'mixed':
$this->View = 'discussions';
$this->Discussions();
break;
case 'table':
$this->Table();
break;
default:
$this->View = 'all';
$this->All();
break;
}
return;
} else {
Gdn_Theme::Section('DiscussionList');
// Figure out which discussions layout to choose (Defined on "Homepage" settings page).
$Layout = C('Vanilla.Discussions.Layout');
switch ($Layout) {
case 'table':
if ($this->SyndicationMethod == SYNDICATION_NONE) {
$this->View = 'table';
}
break;
default:
// $this->View = 'index';
break;
}
$Category = CategoryModel::Categories($CategoryIdentifier);
if (empty($Category)) {
if ($CategoryIdentifier) {
throw NotFoundException();
}
}
$Category = (object) $Category;
Gdn_Theme::Section($Category->CssClass);
// Load the breadcrumbs.
$this->SetData('Breadcrumbs', CategoryModel::GetAncestors(GetValue('CategoryID', $Category)));
$this->SetData('Category', $Category, TRUE);
// Load the subtree.
if (C('Vanilla.ExpandCategories')) {
$Categories = CategoryModel::GetSubtree($CategoryIdentifier);
} else {
$Categories = array($Category);
}
$this->SetData('Categories', $Categories);
// Setup head
$this->AddCssFile('vanilla.css');
$this->Menu->HighlightRoute('/discussions');
if ($this->Head) {
$this->AddJsFile('discussions.js');
$this->AddJsFile('bookmark.js');
$this->AddJsFile('options.js');
$this->Head->AddRss($this->SelfUrl . '/feed.rss', $this->Head->Title());
}
$this->Title(GetValue('Name', $Category, ''));
$this->Description(GetValue('Description', $Category), TRUE);
// Set CategoryID
$CategoryID = GetValue('CategoryID', $Category);
$this->SetData('CategoryID', $CategoryID, TRUE);
// Add modules
$this->AddModule('NewDiscussionModule');
$this->AddModule('DiscussionFilterModule');
$this->AddModule('CategoriesModule');
$this->AddModule('BookmarkedModule');
// Get a DiscussionModel
$DiscussionModel = new DiscussionModel();
$CategoryIDs = ConsolidateArrayValuesByKey($this->Data('Categories'), 'CategoryID');
$Wheres = array('d.CategoryID' => $CategoryIDs);
$this->SetData('_ShowCategoryLink', count($CategoryIDs) > 1);
// Check permission
$this->Permission('Vanilla.Discussions.View', TRUE, 'Category', GetValue('PermissionCategoryID', $Category));
// Set discussion meta data.
$this->EventArguments['PerPage'] = C('Vanilla.Discussions.PerPage', 30);
$this->FireEvent('BeforeGetDiscussions');
list($Offset, $Limit) = OffsetLimit($Page, $this->EventArguments['PerPage']);
if (!is_numeric($Offset) || $Offset < 0) {
$Offset = 0;
}
$CountDiscussions = $DiscussionModel->GetCount($Wheres);
$this->SetData('CountDiscussions', $CountDiscussions);
$this->SetData('_Limit', $Limit);
// We don't wan't child categories in announcements.
$Wheres['d.CategoryID'] = $CategoryID;
$AnnounceData = $Offset == 0 ? $DiscussionModel->GetAnnouncements($Wheres) : new Gdn_DataSet();
$this->SetData('AnnounceData', $AnnounceData, TRUE);
//.........这里部分代码省略.........
示例15: Notifications
/**
* Show notifications for current user.
*
* @since 2.0.0
* @access public
* @param int $Page Number to skip (paging).
*/
public function Notifications($Page = FALSE)
{
$this->Permission('Garden.SignIn.Allow');
$this->EditMode(FALSE);
list($Offset, $Limit) = OffsetLimit($Page, 30);
$this->GetUserInfo();
$this->_SetBreadcrumbs(T('Notifications'), '/profile/notifications');
$this->SetTabView('Notifications');
$Session = Gdn::Session();
$this->ActivityModel = new ActivityModel();
// Drop notification count back to zero.
$this->ActivityModel->MarkRead($Session->UserID);
// Get notifications data.
$Activities = $this->ActivityModel->GetNotifications($Session->UserID, $Offset, $Limit)->ResultArray();
$this->ActivityModel->JoinComments($Activities);
$this->SetData('Activities', $Activities);
unset($Activities);
//$TotalRecords = $this->ActivityModel->GetCountNotifications($Session->UserID);
// Build a pager
$PagerFactory = new Gdn_PagerFactory();
$this->Pager = $PagerFactory->GetPager('MorePager', $this);
$this->Pager->MoreCode = 'More';
$this->Pager->LessCode = 'Newer Notifications';
$this->Pager->ClientID = 'Pager';
$this->Pager->Configure($Offset, $Limit, FALSE, 'profile/notifications/%1$s/');
// Deliver json data if necessary
if ($this->_DeliveryType != DELIVERY_TYPE_ALL) {
$this->SetJson('LessRow', $this->Pager->ToString('less'));
$this->SetJson('MoreRow', $this->Pager->ToString('more'));
if ($Offset > 0) {
$this->View = 'activities';
$this->ControllerName = 'Activity';
}
}
$this->Render();
}