public ActionResult ProductsByTag(int productTagId, CatalogSearchQuery query)
        {
            var productTag = _productTagService.GetProductTagById(productTagId);

            if (productTag == null)
            {
                return(HttpNotFound());
            }

            if (!productTag.Published && !Services.Permissions.Authorize(Permissions.Catalog.Product.Read))
            {
                return(HttpNotFound());
            }

            var model = new ProductsByTagModel
            {
                Id      = productTag.Id,
                TagName = productTag.GetLocalized(y => y.Name)
            };

            query.WithProductTagIds(new int[] { productTagId });

            var searchResult = _catalogSearchService.Search(query);

            model.SearchResult = searchResult;

            var mappingSettings = _helper.GetBestFitProductSummaryMappingSettings(query.GetViewMode());

            model.Products = _helper.MapProductSummaryModel(searchResult.Hits, mappingSettings);

            // Prepare paging/sorting/mode stuff.
            _helper.MapListActions(model.Products, null, _catalogSettings.DefaultPageSizeOptions);

            return(View(model));
        }
Exemple #2
0
        protected virtual void SaveProductTags(Product product, IEnumerable <ProductTagModel> productTags)
        {
            var existingProductTags = product.ProductTags.ToList();
            var productTagsToRemove = new List <ProductTag>();

            foreach (var existingProductTag in existingProductTags)
            {
                if (productTags.Where(pp => pp.Id == existingProductTag.Id).Count() == 0)
                {
                    productTagsToRemove.Add(existingProductTag);
                }
            }

            //遍历当前的标签集合
            foreach (var productTagModel in productTags)
            {
                var tag = productTagModel.ToEntity();
                if (productTagModel.Id > 0)
                {
                    tag = _productTagService.GetProductTagById(productTagModel.Id);
                }

                if (existingProductTags.Where(ept => ept.Id == tag.Id).Count() <= 0)
                {
                    product.ProductTags.Add(tag);
                }
            }

            //删除不存在的图片
            foreach (var productTag in productTagsToRemove)
            {
                product.ProductTags.Remove(productTag);
            }
        }
        public async Task <IActionResult> Products(string tagId, DataSourceRequest command)
        {
            var tag = await _productTagService.GetProductTagById(tagId);

            var products  = (await _productService.SearchProducts(pageIndex: command.Page - 1, pageSize: command.PageSize, productTag: tag.Name, orderBy: Core.Domain.Catalog.ProductSortingEnum.NameAsc)).products;
            var gridModel = new DataSourceResult
            {
                Data = products.Select(x => new
                {
                    Id   = x.Id,
                    Name = x.Name,
                }),
                Total = products.TotalCount
            };

            return(Json(gridModel));
        }
Exemple #4
0
        //in versions 3.00-4.00 we had ID in product tag URLs
        public virtual IActionResult RedirectProductTagById(int productTagId)
        {
            var productTag = _productTagService.GetProductTagById(productTagId);

            if (productTag == null)
            {
                return(RedirectToRoutePermanent("HomePage"));
            }

            return(RedirectToRoutePermanent("ProductsByTag", new { SeName = _urlRecordService.GetSeName(productTag) }));
        }
        public virtual IActionResult ProductsByTag(int productTagId, CatalogPagingFilteringModel command)
        {
            var productTag = _productTagService.GetProductTagById(productTagId);

            if (productTag == null)
            {
                return(InvokeHttp404());
            }

            var model = _catalogModelFactory.PrepareProductsByTagModel(productTag, command);

            return(View(model));
        }
Exemple #6
0
        public ActionResult RedirectProductTag(string id, bool idIncludesSename = true)
        {
            //we can't use dash in MVC
            var tagId = idIncludesSename ? Convert.ToInt32(id.Split(new char[] { '-' })[0]) : Convert.ToInt32(id);
            var tag   = _productTagService.GetProductTagById(tagId);

            if (tag == null)
            {
                return(RedirectToRoutePermanent("HomePage"));
            }

            return(RedirectToRoutePermanent("ProductsByTag", new { productTagId = tag.Id }));
        }
        public virtual IActionResult ProductsByTag(string productTagId, CatalogPagingFilteringModel command, [FromServices] IProductTagService productTagService)
        {
            var productTag = productTagService.GetProductTagById(productTagId);

            if (productTag == null)
            {
                return(InvokeHttp404());
            }

            var model = _catalogViewModelService.PrepareProductsByTag(productTag, command);

            return(View(model));
        }
        public virtual async Task <IActionResult> ProductsByTag(string productTagId, CatalogPagingFilteringModel command, [FromServices] IProductTagService productTagService)
        {
            var productTag = await productTagService.GetProductTagById(productTagId);

            if (productTag == null)
            {
                return(InvokeHttp404());
            }

            var model = await _mediator.Send(new GetProductsByTag()
            {
                Command    = command,
                Language   = _workContext.WorkingLanguage,
                ProductTag = productTag,
                Store      = _storeContext.CurrentStore
            });

            return(View(model));
        }