search
HomeBackend DevelopmentPHP Tutorial[PHP open source product] One of the analysis of the product filtering function of Ecshop (mainly analyzing category.php)_PHP tutorial

1. First, let’s explain why we need to analyze the category.php file.

(1) The reasons are as follows:

①I am curious about the implementation of the shopping mall product filtering function;

② I am more interested in the design of data tables for products in the mall. (This function involves interaction with the database, and has a certain connection with the design of the data table in the database);

③The multi-condition (attribute) filtering function is needed in many websites today and is very widespread (such as: general mall websites, group purchase websites, real estate websites, information classification websites, etc.).

(2) What we hope to achieve is:

① Be able to have a preliminary understanding of the multi-condition filtering function. (At least if you do it yourself, you can achieve it quickly);

②In the implementation of multi-condition filtering, how should the database be designed to be more optimized and reasonable (refer to previous experience);

③Have an understanding of some strategies or techniques in multi-condition screening (will summarize a few points)

2. Then, let’s first take a look at what the demand is now? (For multi-condition filtering, please refer to JD.com, Suning, Gome, etc.)

①Jingdong Mall’s product filtering function (screenshot):

②Suning Mall’s product filtering function (screenshot)

③Gome Online’s product filtering function (screenshot)

Supplement: In fact, to observe this function, we must also think about the address bar. I will omit it here. After all, it will be simpler if we analyze it this way. The above examples are just an introduction. I will improve it later.

④ECSHOP’s product filtering function is implemented, and the display details (screenshot + text) are as follows:

1) First, my local server has a virtual host address for the ecshop demo website installed on this machine:

"GSM mobile phone" category in the navigation bar. As follows:

If I want to view phones branded "Nokia", then click on the "Nokia" tab:

The access address is:

The result page is:

The access address is:

The result page is:

Analysis: From the changes in the address bar and screenshots above, we can initially see what ecshop’s multi-condition search method is like.

Conjecture 1: Every time the user clicks on the condition (attribute) to filter products, the search address bar will change. Why does the address bar change? In the final analysis, it must be for each product. The hyperlink address of the attribute's a tag has been changed. And every time you click, it will change according to the different search conditions.

Thus we know that the hyperlink of this attribute is dynamically generated. The ecshop background must have done a lot of judgment and finally generated a hyperlink address for each product attribute to prevent the last search condition from being lost.

Conjecture 2: What is the basis for calculating the price range of a product? It is still set up manually in the background. The price range of JD.com’s products seems to be very regular, which is quite different from the price range of ecshop. Don't worry about so much, let's study ecshop first.

Conjecture 3: Parameter filter_attr=163.0.160.0 The numbers in must represent the following: select all of them under the color, screen size, phone mode, and appearance style attributes. Which ones are worth it?

----> With these questions, let’s directly study how ecshop implements the above multi-condition search function. . . GO. . .

First, we go to the ecshop website to change the directory, find the category.php file, and open it to study it.

[PHP open source product] One of the analysis of the product filtering function of Ecshop (mainly analyzing category.php)_PHP tutorial ('IN_ECS', (() . '/includes/init.php' ((DEBUG_MODE & 2) != 2 ->caching = 请求地址栏:http://localhost/category.php?id=3&brand=1&price_min=200&price_max=1700&filter_attr=163.216.160.186 1.获取分类id ((['id' = (['id' ((['category' = (['category' } ecs_header("Location: ./n" 2.首先获取所有GET和POST中,可用于搜索的参数的值。 If there is no this parameter, it means that this parameter is not used to search, and a default value is given to it by default. = (['page']) && (['page']) > 0 ? (['page']) : 1 = (['page_size']) && (['page_size']) > 0 ? (['page_size']) : 10 = (['brand']) && (['brand']) > 0 ? (['brand']) : 0 = (['price_max']) && (['price_max']) > 0 ? (['price_max']) : 0 = (['price_min']) && (['price_min']) > 0 ? (['price_min']) : 0 = (['filter_attr']) ? ((['filter_attr'])) : '0' = ( = () ? '' : ('.', ( = ['show_order_type'] == '0' ? 'list' : (['show_order_type'] == '1' ? 'grid' : 'text' = ['sort_order_method'] == '0' ? 'DESC' : 'ASC' = ['sort_order_type'] == '0' ? 'goods_id' : (['sort_order_type'] == '1' ? 'shop_price' : 'last_update' = ((['sort']) && (((['sort'])), ('goods_id', 'shop_price', 'last_update'))) ? (['sort']) : = ((['order']) && (((['order'])), ('ASC', 'DESC'))) ? (['order']) : = ((['display']) && (((['display'])), ('list', 'grid', 'text'))) ? (['display']) : ((['ECS']['display']) ? ['ECS']['display'] : = (, ('list', 'grid', 'text')) ? : 'text' ('ECS[display]', , gmtime() + 86400 * 7 = ('%X', ( . '-' . . '-' . .'-' . .'-' . . '-' . . '-' . ['user_rank'] . '-' . ['lang'] .'-'. . '-' . . '-' . . '-' . (!->is_cached('category.dwt', 3.把该栏目下的所有子栏目id获取,如果没有子栏目,则是自身。
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What is dependency injection in PHP?What is dependency injection in PHP?May 07, 2025 pm 03:09 PM

DependencyinjectioninPHPisadesignpatternthatenhancesflexibility,testability,andmaintainabilitybyprovidingexternaldependenciestoclasses.Itallowsforloosecoupling,easiertestingthroughmocking,andmodulardesign,butrequirescarefulstructuringtoavoidover-inje

Best PHP Performance Optimization TechniquesBest PHP Performance Optimization TechniquesMay 07, 2025 pm 03:05 PM

PHP performance optimization can be achieved through the following steps: 1) use require_once or include_once on the top of the script to reduce the number of file loads; 2) use preprocessing statements and batch processing to reduce the number of database queries; 3) configure OPcache for opcode cache; 4) enable and configure PHP-FPM optimization process management; 5) use CDN to distribute static resources; 6) use Xdebug or Blackfire for code performance analysis; 7) select efficient data structures such as arrays; 8) write modular code for optimization execution.

PHP Performance Optimization: Using Opcode CachingPHP Performance Optimization: Using Opcode CachingMay 07, 2025 pm 02:49 PM

OpcodecachingsignificantlyimprovesPHPperformancebycachingcompiledcode,reducingserverloadandresponsetimes.1)ItstorescompiledPHPcodeinmemory,bypassingparsingandcompiling.2)UseOPcachebysettingparametersinphp.ini,likememoryconsumptionandscriptlimits.3)Ad

PHP Dependency Injection: Boost Code MaintainabilityPHP Dependency Injection: Boost Code MaintainabilityMay 07, 2025 pm 02:37 PM

Dependency injection provides object dependencies through external injection in PHP, improving the maintainability and flexibility of the code. Its implementation methods include: 1. Constructor injection, 2. Set value injection, 3. Interface injection. Using dependency injection can decouple, improve testability and flexibility, but attention should be paid to the possibility of increasing complexity and performance overhead.

How to Implement Dependency Injection in PHPHow to Implement Dependency Injection in PHPMay 07, 2025 pm 02:33 PM

Implementing dependency injection (DI) in PHP can be done by manual injection or using DI containers. 1) Manual injection passes dependencies through constructors, such as the UserService class injecting Logger. 2) Use DI containers to automatically manage dependencies, such as the Container class to manage Logger and UserService. Implementing DI can improve code flexibility and testability, but you need to pay attention to traps such as overinjection and service locator anti-mode.

What is the difference between unset() and session_destroy()?What is the difference between unset() and session_destroy()?May 04, 2025 am 12:19 AM

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

What is sticky sessions (session affinity) in the context of load balancing?What is sticky sessions (session affinity) in the context of load balancing?May 04, 2025 am 12:16 AM

Stickysessionsensureuserrequestsareroutedtothesameserverforsessiondataconsistency.1)SessionIdentificationassignsuserstoserversusingcookiesorURLmodifications.2)ConsistentRoutingdirectssubsequentrequeststothesameserver.3)LoadBalancingdistributesnewuser

What are the different session save handlers available in PHP?What are the different session save handlers available in PHP?May 04, 2025 am 12:14 AM

PHPoffersvarioussessionsavehandlers:1)Files:Default,simplebutmaybottleneckonhigh-trafficsites.2)Memcached:High-performance,idealforspeed-criticalapplications.3)Redis:SimilartoMemcached,withaddedpersistence.4)Databases:Offerscontrol,usefulforintegrati

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.