本文整理汇总了PHP中ArrayList类的典型用法代码示例。如果您正苦于以下问题:PHP ArrayList类的具体用法?PHP ArrayList怎么用?PHP ArrayList使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ArrayList类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的PHP代码示例。
示例1: LatestTweetsList
public function LatestTweetsList($limit = '5')
{
$conf = SiteConfig::current_site_config();
if (empty($conf->TwitterName) || empty($conf->TwitterConsumerKey) || empty($conf->TwitterConsumerSecret) || empty($conf->TwitterAccessToken) || empty($conf->TwitterAccessTokenSecret)) {
return new ArrayList();
}
$cache = SS_Cache::factory('LatestTweets_cache');
if (!($results = unserialize($cache->load(__FUNCTION__)))) {
$results = new ArrayList();
require_once dirname(__FILE__) . '/tmhOAuth/tmhOAuth.php';
require_once dirname(__FILE__) . '/tmhOAuth/tmhUtilities.php';
$tmhOAuth = new tmhOAuth(array('consumer_key' => $conf->TwitterConsumerKey, 'consumer_secret' => $conf->TwitterConsumerSecret, 'user_token' => $conf->TwitterAccessToken, 'user_secret' => $conf->TwitterAccessTokenSecret, 'curl_ssl_verifypeer' => false));
$code = $tmhOAuth->request('GET', $tmhOAuth->url('1.1/statuses/user_timeline'), array('screen_name' => $conf->TwitterName, 'count' => $limit));
$tweets = $tmhOAuth->response['response'];
$json = new JSONDataFormatter();
if (($arr = $json->convertStringToArray($tweets)) && is_array($arr) && isset($arr[0]['text'])) {
foreach ($arr as $tweet) {
try {
$here = new DateTime(SS_Datetime::now()->getValue());
$there = new DateTime($tweet['created_at']);
$there->setTimezone($here->getTimezone());
$date = $there->Format('Y-m-d H:i:s');
} catch (Exception $e) {
$date = 0;
}
$results->push(new ArrayData(array('Text' => nl2br(tmhUtilities::entify_with_options($tweet, array('target' => '_blank'))), 'Date' => SS_Datetime::create_field('SS_Datetime', $date))));
}
}
$cache->save(serialize($results), __FUNCTION__);
}
return $results;
}
开发者ID:unisolutions,项目名称:silverstripe-latesttweets,代码行数:32,代码来源:LaTw_Page_Controller_Extension.php
示例2: transformCollectionAsArrayList
public function transformCollectionAsArrayList($collection)
{
$result = $this->transformCollection($collection);
$list = new \ArrayList();
$list->addAll($result);
return $list;
}
开发者ID:scottleedavis,项目名称:hackazon,代码行数:7,代码来源:PHPixieORMRepository.php
示例3: updateRelatedProducts
/**
* @param ManyManyList $products
*/
public function updateRelatedProducts(&$products, $limit, $random)
{
$curCount = $products->count();
if ($curCount < $limit) {
$cfg = Config::inst()->forClass(get_class($this->owner));
$class = $cfg->get('related_products_class');
// look up the fields
$fields = $cfg->get('related_products_fields');
if (empty($fields)) {
return;
}
if (!is_array($fields)) {
$fields = array($fields);
}
// create a filter from the fields
$filter = array();
foreach ($fields as $f) {
$filter[$f] = $this->owner->getField($f);
}
// Convert to an array list so we can add to it
$products = new ArrayList($products->toArray());
// Look up products that match the filter
$generated = DataObject::get($class)->filterAny($filter)->exclude('ID', $this->owner->ID)->sort('RAND()')->limit($limit - $curCount);
foreach ($generated as $prod) {
$products->push($prod);
}
}
}
开发者ID:markguinn,项目名称:silverstripe-related_products,代码行数:31,代码来源:HasGeneratedRelatedProducts.php
示例4: generatePrintData
/**
* Export core
*
* Replaces definition in GridFieldPrintButton
* same as original except sources data from $gridField->getList() instead of $gridField->getManipulatedList()
*
* @param GridField
*/
public function generatePrintData(GridField $gridField)
{
$printColumns = $this->getPrintColumnsForGridField($gridField);
$header = null;
if ($this->printHasHeader) {
$header = new ArrayList();
foreach ($printColumns as $field => $label) {
$header->push(new ArrayData(array("CellString" => $label)));
}
}
// The is the only variation from the parent class, using getList() instead of getManipulatedList()
$items = $gridField->getList();
$itemRows = new ArrayList();
foreach ($items as $item) {
$itemRow = new ArrayList();
foreach ($printColumns as $field => $label) {
$value = $gridField->getDataFieldValue($item, $field);
$itemRow->push(new ArrayData(array("CellString" => $value)));
}
$itemRows->push(new ArrayData(array("ItemRow" => $itemRow)));
$item->destroy();
}
$ret = new ArrayData(array("Title" => $this->getTitle($gridField), "Header" => $header, "ItemRows" => $itemRows, "Datetime" => SS_Datetime::now(), "Member" => Member::currentUser()));
return $ret;
}
开发者ID:mandrew,项目名称:silverstripe-securityreport,代码行数:33,代码来源:GridFieldPrintReportButton.php
示例5: searchFromVars
/**
* @param string $keywords
* @param array $filters [optional]
* @param array $facetSpec [optional]
* @param int $start [optional]
* @param int $limit [optional]
* @param string $sort [optional]
* @return ArrayData
*/
function searchFromVars($keywords, array $filters = array(), array $facetSpec = array(), $start = -1, $limit = -1, $sort = '')
{
$searchable = ShopSearch::get_searchable_classes();
$matches = new ArrayList();
foreach ($searchable as $className) {
$list = DataObject::get($className);
// get searchable fields
$keywordFields = $this->getSearchFields($className);
// build the filter
$filter = array();
// Use parametrized query if SilverStripe >= 3.2
if (SHOP_SEARCH_IS_SS32) {
foreach ($keywordFields as $indexFields) {
$filter[] = array("MATCH ({$indexFields}) AGAINST (?)" => $keywords);
}
$list = $list->whereAny($filter);
} else {
foreach ($keywordFields as $indexFields) {
$filter[] = sprintf("MATCH ({$indexFields}) AGAINST ('%s')", Convert::raw2sql($keywords));
}
// join all the filters with an "OR" statement
$list = $list->where(implode(' OR ', $filter));
}
// add in any other filters
$list = FacetHelper::inst()->addFiltersToDataList($list, $filters);
// add any matches to the big list
$matches->merge($list);
}
return new ArrayData(array('Matches' => $matches, 'Facets' => FacetHelper::inst()->buildFacets($matches, $facetSpec, (bool) Config::inst()->get('ShopSearch', 'auto_facet_attributes'))));
}
开发者ID:helpfulrobot,项目名称:markguinn-silverstripe-shop-search,代码行数:39,代码来源:ShopSearchMysql.php
示例6: getItems
/**
* Return this field's linked items
*/
function getItems() {
// If the value has been set, use that
if($this->value != 'unchanged' && is_array($this->sourceObject)) {
$items = array();
$values = is_array($this->value) ? $this->value : preg_split('/ *, */', trim($this->value));
foreach($values as $value) {
$item = new stdClass;
$item->ID = $value;
$item->Title = $this->sourceObject[$value];
$items[] = $item;
}
return $items;
// Otherwise, look data up from the linked relation
} if($this->value != 'unchanged' && is_string($this->value)) {
$items = new ArrayList();
$ids = explode(',', $this->value);
foreach($ids as $id) {
if(!is_numeric($id)) continue;
$item = DataObject::get_by_id($this->sourceObject, $id);
if($item) $items->push($item);
}
return $items;
} else if($this->form) {
$fieldName = $this->name;
$record = $this->form->getRecord();
if(is_object($record) && $record->hasMethod($fieldName))
return $record->$fieldName();
}
}
开发者ID:redema,项目名称:sapphire,代码行数:33,代码来源:TreeMultiselectField.php
示例7: ViewableDiscussions
/**
* Get a filtered list of discussions by can view rights.
*
* This method is basically the meat and potates of this module and does most
* of the crunch work of finding the relevant discussion list and ensuring
* the current user is allowed to view it.
*
* @return DataList
*/
public function ViewableDiscussions()
{
$tag = $this->getTag();
$category = $this->getCategory();
$member = Member::currentUser();
$discussions_to_view = new ArrayList();
if ($tag) {
$SQL_tag = Convert::raw2sql($tag);
$discussions = Discussion::get()->filter("ParentID", $this->ID)->where("\"Discussion\".\"Tags\" LIKE '%{$SQL_tag}%'");
} elseif ($category) {
$discussions = Discussion::get()->filter(array("ParentID" => $this->ID, "Categories.ID:ExactMatch" => $category->ID));
} elseif ($this->request->param('Action') == 'liked') {
$discussions = $member->LikedDiscussions();
} elseif ($this->request->param('Action') == 'my') {
$discussions = Discussion::get()->filter(array("ParentID" => $this->ID, "AuthorID" => $member->ID));
} else {
$discussions = $this->Discussions();
}
foreach ($discussions as $discussion) {
if ($discussion->canView($member)) {
$discussions_to_view->add($discussion);
}
}
$this->extend("updateViewableDiscussions", $discussions_to_view);
return new PaginatedList($discussions_to_view, $this->request);
}
开发者ID:helpfulrobot,项目名称:i-lateral-silverstripe-discussions,代码行数:35,代码来源:DiscussionHolder_Controller.php
示例8: getHTMLFragments
/**
* @param GridField $gridField
*
* @return array
*/
public function getHTMLFragments($gridField)
{
Requirements::css(CMC_BULKUPDATER_MODULE_DIR . '/css/CmcGridFieldBulkUpdater.css');
Requirements::javascript(CMC_BULKUPDATER_MODULE_DIR . '/javascript/CmcGridFieldBulkUpdater.js');
Requirements::add_i18n_javascript(CMC_BULKUPDATER_MODULE_DIR . '/lang/js');
//initialize column data
$cols = new ArrayList();
$fields = $gridField->getConfig()->getComponentByType('GridFieldEditableColumns')->getDisplayFields($gridField);
foreach ($gridField->getColumns() as $col) {
$fieldName = $col;
$fieldType = '';
$fieldLabel = '';
if (isset($fields[$fieldName])) {
$fieldData = $fields[$fieldName];
if (isset($fieldData['field'])) {
$fieldType = $fieldData['field'];
}
if (isset($fieldData['title'])) {
$fieldLabel = $fieldData['title'];
}
}
//Debug::show($fieldType);
if (class_exists($fieldType) && $fieldType != 'ReadonlyField') {
$field = new $fieldType($fieldName, $fieldLabel);
if ($fieldType == 'DatetimeField' || $fieldType == 'DateField' || $fieldType == 'TimeField') {
$field->setValue(date('Y-m-d H:i:s'));
$field->setConfig('showcalendar', true);
}
$cols->push(new ArrayData(array('UpdateField' => $field, 'Name' => $fieldName, 'Title' => $fieldLabel)));
} else {
$meta = $gridField->getColumnMetadata($col);
$cols->push(new ArrayData(array('Name' => $col, 'Title' => $meta['title'])));
}
}
$templateData = array();
if (!count($this->config['actions'])) {
user_error('Trying to use GridFieldBulkManager without any bulk action.', E_USER_ERROR);
}
//set up actions
$actionsListSource = array();
$actionsConfig = array();
foreach ($this->config['actions'] as $action => $actionData) {
$actionsListSource[$action] = $actionData['label'];
$actionsConfig[$action] = $actionData['config'];
}
reset($this->config['actions']);
$firstAction = key($this->config['actions']);
$dropDownActionsList = DropdownField::create('bulkActionName', '')->setSource($actionsListSource)->setAttribute('class', 'bulkActionName no-change-track')->setAttribute('id', '');
//initialize buttonLabel
$buttonLabel = _t('CMC_GRIDFIELD_BULK_UPDATER.ACTION1_BTN_LABEL', $this->config['actions'][$firstAction]['label']);
//add menu if more than one action
if (count($this->config['actions']) > 1) {
$templateData = array('Menu' => $dropDownActionsList->FieldHolder());
$buttonLabel = _t('CMC_GRIDFIELD_BULK_UPDATER.ACTION_BTN_LABEL', 'Go');
}
//Debug::show($buttonLabel);
$templateData = array_merge($templateData, array('Button' => array('Label' => $buttonLabel, 'Icon' => $this->config['actions'][$firstAction]['config']['icon']), 'Select' => array('Label' => _t('CMC_GRIDFIELD_BULK_UPDATER.SELECT_ALL_LABEL', 'Select all')), 'Colspan' => count($gridField->getColumns()) - 1, 'Cols' => $cols));
$templateData = new ArrayData($templateData);
return array('header' => $templateData->renderWith('CmcBulkUpdaterButtons'));
}
开发者ID:cmcramer,项目名称:cmc-silverstripe-gridfieldbulkupdater,代码行数:65,代码来源:CmcGridFieldBulkUpdater.php
示例9: canBeDiscounted
/**
* normally returns TRUE, but returns FALSE when it, or its parent is in the list.
* todo: add products in other product categories
* @param SiteTree $page
* @return Boolean
*/
function canBeDiscounted(SiteTree $page)
{
if ($this->owner->PageIDs) {
$allowedPageIDs = explode(',', $this->owner->PageIDs);
$checkPages = new ArrayList(array($page));
$alreadyCheckedPageIDs = array();
while ($checkPages->Count()) {
$page = $checkPages->First();
if (array_search($page->ID, $allowedPageIDs) !== false) {
return true;
}
$alreadyCheckedPageIDs[] = $page->ID;
$checkPages->remove($page);
// Parents list update
if ($page->hasMethod('AllParentGroups')) {
$parents = new ArrayList($page->AllParentGroups()->toArray());
} else {
$parents = new ArrayList();
}
$parent = $page->Parent();
if ($parent && $parent->exists()) {
$parents->unshift($parent);
}
foreach ($parents as $parent) {
if (array_search($parent->ID, $alreadyCheckedPageIDs) === false) {
$checkPages->push($parent);
}
}
$checkPages->removeDuplicates();
}
return false;
}
return true;
}
开发者ID:helpfulrobot,项目名称:sunnysideup-ecommerce-discount-coupon,代码行数:40,代码来源:DiscountCouponSiteTreeDOD.php
示例10: getInheritedSchemas
/**
* If this is attached to an object with the hierarchy extension, it returns
* a set of a schema objects attached to any ancestors (which should be
* present on this object).
*
* @return ArrayList
*/
public function getInheritedSchemas()
{
$result = new ArrayList();
if (!$this->owner->hasExtension('Hierarchy')) {
return new ArrayList();
}
$ids = array();
$parents = $this->owner->getAncestors();
foreach ($parents as $parent) {
$ids[] = $parent->ID;
}
if (count($ids)) {
$filter = sprintf('"MetadataSchema"."ID" = "MetadataSchemaLink"."SchemaID"' . ' AND "MetadataSchemaLink"."ParentClass" = \'%s\'' . ' AND "MetadataSchemaLink"."ParentID" IN (%s)', ClassInfo::baseDataClass($this->owner->class), implode(', ', $ids));
$result = MetadataSchema::get()->innerJoin('MetadataSchemaLink', $filter);
if ($result) {
$result = new ArrayList($result->toArray());
} else {
$result = new ArrayList();
}
}
if ($this->owner instanceof SiteTree) {
// Check SiteConfig too
$config = SiteConfig::current_site_config();
if ($config->hasExtension('MetadataExtension')) {
$schemas = $config->getAttachedSchemas();
if ($schemas && $schemas->count()) {
$result->merge($schemas);
}
}
}
return $result;
}
开发者ID:phill-m,项目名称:silverstripe-metadata,代码行数:39,代码来源:MetadataExtension.php
示例11: Times
function Times() {
$output = new ArrayList();
for( $i = 0; $i < $this->value; $i++ )
$output->push( new ArrayData( array( 'Number' => $i + 1 ) ) );
return $output;
}
开发者ID:redema,项目名称:sapphire,代码行数:7,代码来源:Int.php
示例12: constrainGridListFilters
/**
* If HideUnmatchedFilters is on then remove all filters which are not found in the items by their 'AssociatedFilters' relationship.
*
* @param \DataList $filters list of GridListFilter models
* @param array $parameters
* @return \ArrayList
*/
public function constrainGridListFilters(&$filters, &$parameters = [])
{
$out = new \ArrayList();
if ($this()->{self::SingleFieldName}) {
$ids = $filters->column('ID');
if (count($ids)) {
$items = $this()->GridListItems();
// this is where we keep track of GridListFilters which have been found on items where ID is the key
$foundFilters = array_combine($ids, array_fill(0, count($ids), false));
foreach ($foundFilters as $filterID => &$found) {
/** @var \Page|Model $item */
foreach ($items as $item) {
if ($item->hasExtension(HasGridListFilters::class_name())) {
if ($itemFilters = $item->{HasGridListFilters::relationship_name()}()->column('ID')) {
if (in_array($filterID, $itemFilters)) {
$found = true;
break;
}
}
}
}
}
foreach ($filters as $filter) {
if (isset($foundFilters[$filter->ID])) {
$out->push($filter);
}
}
$filters = $out;
}
}
}
开发者ID:CrackerjackDigital,项目名称:silverstripe-modular,代码行数:38,代码来源:HideUnmatchedFilters.php
示例13: AvailableWidgets
/**
*
* @return ArrayList
*/
public function AvailableWidgets()
{
$widgets = new ArrayList();
foreach ($this->widgetClasses as $widgetClass) {
$classes = ClassInfo::subclassesFor($widgetClass);
if (isset($classes['Widget'])) {
unset($classes['Widget']);
} else {
if (isset($classes[0]) && $classes[0] == 'Widget') {
unset($classes[0]);
}
}
foreach ($classes as $class) {
$available = Config::inst()->get($class, 'only_available_in');
if (!empty($available) && is_array($available)) {
if (in_array($this->Name, $available)) {
$widgets->push(singleton($class));
}
} else {
$widgets->push(singleton($class));
}
}
}
return $widgets;
}
开发者ID:hailwood,项目名称:silverstripe-widgets,代码行数:29,代码来源:WidgetAreaEditor.php
示例14: index
public function index()
{
$featured_news = new ArrayList($this->news_repository->getFeaturedNews(true, 3));
$recent_news = new ArrayList($this->news_repository->getRecentNews());
$slide_news = new ArrayList($this->news_repository->getSlideNews());
return $this->renderWith(array('NewsPage', 'Page'), array('FeaturedNews' => $featured_news, 'RecentNews' => $recent_news, 'SlideNews' => $slide_news, 'SlideNewsCount' => $slide_news->count()));
}
开发者ID:Thingee,项目名称:openstack-org,代码行数:7,代码来源:NewsPage_Controller.php
示例15: doAllChildrenIncludingDeleted
public function doAllChildrenIncludingDeleted($context = null)
{
if (!$this->owner) {
user_error('Hierarchy::doAllChildrenIncludingDeleted() called without $this->owner');
}
$baseClass = ClassInfo::baseDataClass($this->owner->class);
if ($baseClass) {
$stageChildren = $this->owner->stageChildren(true);
$stageChildren = $this->RemoveNewsPostsFromSiteTree($stageChildren);
// Add live site content that doesn't exist on the stage site, if required.
if ($this->owner->hasExtension('Versioned')) {
// Next, go through the live children. Only some of these will be listed
$liveChildren = $this->owner->liveChildren(true, true);
if ($liveChildren) {
$liveChildren = $this->RemoveNewsPostsFromSiteTree($liveChildren);
$merged = new ArrayList();
$merged->merge($stageChildren);
$merged->merge($liveChildren);
$stageChildren = $merged;
}
}
$this->owner->extend("augmentAllChildrenIncludingDeleted", $stageChildren, $context);
} else {
user_error("Hierarchy::AllChildren() Couldn't determine base class for '{$this->owner->class}'", E_USER_ERROR);
}
return $stageChildren;
}
开发者ID:silverstripers,项目名称:silverstripe-news,代码行数:27,代码来源:NewsHierarchy.php
示例16: testAddSameElementTwice
function testAddSameElementTwice()
{
$list = new ArrayList("string");
$list->add("Hello there");
$list->add("Hello there");
$this->assertEqual(2, $list->size());
}
开发者ID:aeberh,项目名称:php-movico,代码行数:7,代码来源:ListAddElementTest.php
示例17: updateFilteredEmailRecipients
public function updateFilteredEmailRecipients(ArrayList $recipients, $data, $form)
{
foreach ($recipients as $recipient) {
// check if condition set
if (($field = $recipient->ConditionField()) && $field->ID) {
// get field name
$fieldName = $field->Name;
// get condition value
$conditionValue = $recipient->ConditionFieldValue;
// get field value
$fieldValue = "";
if ($field->hasMethod('getValueFromData')) {
$fieldValue = $field->getValueFromData($data);
} else {
if (isset($data[$fieldName])) {
$fieldValue = $data[$fieldName];
}
}
// remove recipient if values don't match
if (trim($fieldValue) != trim($conditionValue)) {
$recipients->remove($recipient);
}
}
}
}
开发者ID:xini,项目名称:silverstripe-userforms-conditional-recipient,代码行数:25,代码来源:ConditionalRecipientUserDefinedFormExtension.php
示例18: listProducts
public function listProducts()
{
$idlist = $this->getProductIdsForPage();
if (is_array($idlist)) {
$prods = Product::get()->byIDs($idlist)->sort('SortKey, Brand, Sold asc');
#Nollst�ll
$oldpostBrand = "";
$oldpostSold = "";
$outdata = new ArrayList();
foreach ($prods as $prod) {
if ($oldpostBrand != $prod->Brand || $oldpostSold != $prod->Sold) {
// Rubrik ska skrivas ut s� den stoppas in i en egen ArrayData
$headerRow = new ArrayData(array('isHeaderRow' => true, 'HeaderBrand' => $prod->Brand, 'HeaderSold' => $prod->Sold));
$outdata->push($headerRow);
}
#Vanlig row
$thisrow = $prod;
$outdata->push($thisrow);
#spara undan f�r att j�mf�ra
$oldpostBrand = $prod->Brand;
$oldpostSold = $prod->Sold;
}
return $outdata;
}
}
开发者ID:shoaibafzal,项目名称:Tiptop-musik-SilverStripe,代码行数:25,代码来源:Page.php
示例19: testNormalList
function testNormalList()
{
$list = new ArrayList("string");
$list->add("a");
$list->add("b");
$this->assertEqual("[a,b]", $list->__toString());
}
开发者ID:aeberh,项目名称:php-movico,代码行数:7,代码来源:ListToStringTest.php
示例20: Downloads
function Downloads()
{
$dos = new ArrayList();
$folders = $this->getFolderList();
//get details
foreach ($folders as $folder) {
$svnLink = "https://silverstripe-ecommerce.googlecode.com/svn/modules/{$folder}/trunk/";
if ($folder == "ecommerce") {
$svnLink = "https://silverstripe-ecommerce.googlecode.com/svn/trunk/";
}
$gitLink = "https://github.com/sunnysideup/silverstripe-{$folder}";
$downloadLink = "assets/downloads/" . trim($folder) . ".zip";
if (!isset($this->defaultDownloadArray[$folder])) {
$this->defaultDownloadArray[$folder] = array("Title" => $folder, "FolderPadded" => $folder, "SVNLink" => $svnLink, "GITLink" => $gitLink);
}
$downloadFile = Director::baseFolder() . "/" . $downloadLink;
if (file_exists($downloadFile)) {
$this->defaultDownloadArray[$folder]["DownloadLink"] = $downloadLink;
}
}
//sort
ksort($this->defaultDownloadArray);
//pad folder for svn externals and add to dos...
foreach ($this->defaultDownloadArray as $folder => $folderArray) {
$folderArray["Folder"] = $folder;
if (isset($folderArray["FolderPadded"])) {
$folderArray["FolderPadded"] = str_pad(trim($folderArray["FolderPadded"]), 45, " ", STR_PAD_RIGHT);
}
if (isset($folderArray["GITLink"])) {
$folderArray["GITLinkGIT"] = str_pad(str_replace("https://", "git://", $folderArray["GITLink"]), 85, " ", STR_PAD_RIGHT);
}
$dos->push(new ArrayData($folderArray));
}
return $dos;
}
开发者ID:helpfulrobot,项目名称:sunnysideup-ecommerce-test,代码行数:35,代码来源:DownloadPage.php
注:本文中的ArrayList类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论