【转】Magento2目录结构

目录结构


可以看到,M2的目录挺多的。
我们依次来讲解下,

我这里截取的是github里的源代码,核心代码跟composer和官网下载的源码包的存放路径不一样。
如果是github下载的,那么m2的核心源代码就在app/code/Magento里。
如果是composer安装或者官网下载的源码包,那么m2的核心源代码就在vendor/magento里。
其他的都是一样的

app
毫无疑问,app目录就是存放的网站源代码。
我们的插件/主题/js/css/等等都放在这个目录里。

bin
这是M2提供的命令行工具,比如最常用的

php bin/magento

我们之前就用这个工具来自动安装m2了。

dev
M2的单元测试代码,这个我们普通用户一般用不到。
m2的官方开发者会用到。
一般用不到,不管他就行。

generated
这个比较特殊,在M2里可以定义一些虚拟类。
这些类是自动生成的,会放在generated目录里。
相当于php代码缓存。
如果你有修改php的构造函数function __construct()里的代码,就要rm generated/* -rf,不然会出现找不到类或者其他奇怪的错误。

lib
这里放的是m2自带的公用js/jquery插件和字体。
一般用不到,不管他就行。

phpserver
这里放的是php内置的web服务器。
用来代替浏览器,直接命令行里打开网站。
一般用不到,不管他就行。

pub
这里存放的是图片文件(比如产品图片)
以及生成的静态缓存文件.
我们会经常用到

setup
一看就知道是安装目录,没什么好说的。

var
这里存放的是cache以及page cahce缓存文件。
以及log,report,export文件等。
我们会经常用到

vendor
这里存放的是第三方php组件。
也就是composer install后下载安装的第三方php组件。

如果是composer安装或者官网下载的源码包,那么m2的核心源代码就在vendor/magento里,
这样的话我们以后在开发过程中,会经常调试vendor/magento里的核心代码。

.htaccess
这个是apache服务器里的配置文件
如果你用的是apache服务的话 会用到这个文件

composer.json
这里就是m2依赖的各种库文件。
composer install 就是读取的这个文件。

index.php
毫无疑问,这是入口文件

注意: M2的默认nginx配置的入口文件是在pub/index.php里,是为了安全,不暴露app/文件夹。

nginx.conf.sample
这是nginx下,m2官方推荐的配置文件。
如果你用的是nginx服务的话,会用到这个文件

基本上就这些了。

现在我们重点讲解下app,pub这2个目录下面的内容。
因为我们开发中 基本上就是跟这2个目录打交道。

重点

app

code

插件放这个目录,包括Magento核心代码。
你安装后 会发现已存在code/Magento目录。
当然以后装第三方插件或者自己写的插件 都放在code下面
我们在第四章会手把手教你写插件。现在就卖个关子。

design

主题放这个目录,包括前后台主题。

adminhtml/Magento/backend是默认后台主题
frontend/Magento 是默认前台主题

我们一般不需要改后台主题。
我们主要是改前台主题,但是不要直接改frontend/Magento默认主题。
你最好自己新建一个主题,在自己的主题里修改。
我们在第三章会手把手教你写主题,重写默认主题代码。现在就卖个关子。

etc

这里是m2系统配置文件,不需要动它。

i18n

这是m2的语言包存放目录。
你安装的第三方语言包都会放在这里

pub


这里面有个index.php,这个跟项目根目录下的index.php是一样的。
自带的nginx.conf.sample是把pub/index.php设置成入口路径。
当然你也可以把入口路径改成项目根目录/index.php,也没问题,不建议这样做,因为暴露了app/目录,不安全。
一般是读取pub/文件夹下deploy生成的文件。保证了app/目录的安全性。

errors

这里放的是一些404或者503错误页面。
不需要动它

media

这里放的是分类图片/产品图片/下载文件/其他后台上传的图片或者文件,
不需要动它

static

这个就非常重要了,你deploy后就会生成网站静态文件到这里。

他会生成前后台的静态文件。
包括phtml(模版文件)/js/css等等,也就是把所有插件(code目录里的)里的代码都生成静态文件。

所以,在开启缓存的情况下,前台都是读取这里的js/css/模版。

因此,在开启缓存的情况下,调试模版/js/css代码的时候,要注意下,不能直接改code,design里的源代码,改了后会不生效,直接改static下面的文件就行。
因为它生成的目录结构 跟插件的目录结构是一样的。

现在非常流行deploy 生成全静态文件。比如hexo 是把md文件都deploy成静态html。

你也许会觉得这样的话,调试代码很麻烦,改个地方 还得deploy下 才能看到效果。

其实不然,你可以建2个版本的网站,一个是开发版,一个是线上版。
开发功能的时候 只在开发版里开发调试,把缓存都禁用 ,调完测试完后,就把代码推到线上去。
线上的再接收,然后deploy生成静态文件部署。

核心文件介绍

注意:
如果是用composer安装的话,核心文件在vendor/magento里。
如果是用github下载安装的话,核心文件在app/code/Magento里。

请自己确认是用哪种方式安装的,别到时候找不到地方怪教程不对。

app/code/Magento里的:

vendor/magento里的:

可以看到,M2的核心源代码就这些,相当于是核心扩展。
版本升级的时候 也是自动更新这里的代码。

看起来很多,因为m2功能太强大了,不多不行。
在这个入门课里 我们不需要那么烧脑 我们只需要掌握常用的几个就行了。
以前台为例,常用的主要有:

  1. 分类和产品页面 -> Catalog
  2. customer用户中心页面 -> Customer
  3. 购物车页面 -> Checkout
  4. 支付页面 -> Checkout
  5. 订单页面 -> Sales
  6. 搜索页面 -> Search
  7. 首页及cms页面 -> Cms
  8. 联系我们页面 -> Contact

然后product里的可配置产品和下载产品比较特殊,不在catalog里,是单独扩展出来的。

  1. 可配置产品 -> ConfigurableProduct
  2. 下载产品 -> Downloadable

好了,掌握这些就足够了,能解决80%的问题了。我们刚开始不需要一口吃个胖子。

有了这个概念后 你知道哪个页面改该哪里的代码了。

必须注意一点:
不能直接改这里的核心源代码,否则版本升级的时候会自动覆盖
我们需要重写这些文件。
php文件的话用plugin/preference/events等方式来重写
phtml的话直接在自定义主题下面重写。后面章节会讲
xml的话也直接在自定义主题/插件下面的layout里重写。后面章节会讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法 - 排序算法 (算法学习)(冒泡、选择、插入、希尔、快排、归并)

1&#xff09;冒泡排序 1.1 图解演示 2&#xff09;选择排序 import java.text.SimpleDateFormat; import java.util.Date;/*** 选择排序*/ public class chooseSort {public static void selectSort(int[] arr){for (int i 0; i < arr.length; i) {int minIndex i;int m…

【转】1.4 Magento2语法讲解

M2不是一个标准的MVC架构。 这是m2的app/code/Magento/Catalog插件代码。 可以看到&#xff0c;它有Controller,也有Model,也有view. 奇怪的是,在Controller找不到调用模版的代码。 这是因为我们之前讲过,m2的页面都是用xml写的&#xff0c;xml里是由若干个block组成的。block里…

【转】1.5 运行原理剖析

我们不讲底层架构,核心原理,太枯燥&#xff0c;也记不住&#xff0c;没必要。 毕竟不是人人都要当架构师。 我们从M2的模式说起。 理解了他的模式,就知道了他的原理。 M2有3种模式, 默认模式(default)开发模式(developer)生产模式(production) 默认模式 安装完成后&#xf…

SparkStreaming简介 - 与第一个Spark实时计算程序,使用netcat来写数据 - wordcount

官方文档 Spark Streaming 火花流是spark API的扩展&#xff0c;它支持可伸缩、高吞吐量、容错的实时数据流处理。 数据可以从多种来源(如Kafka、Flume、Kinesis或tcp套接字)中摄取&#xff0c;并且可以使用用高级函数表示的复杂算法进行处理&#xff0c;例如map, reduce, jo…

【转】老邹说Magento的前世今生

文章目录[隐藏] Magento Commerce的历史Magento 2版本历史Magento电子商务的特点和功能Magento市场Magento认证Magento事件为什么Magento统治电子商务领域 想要深入了解magento&#xff0c;我们有必要回顾一下Magento的前世今生&#xff0c;看它是如何一步步成长起来的。 为什…

【转】Magento2 安装系列一 虚拟机、CentOS7 安装

前言 最近打算在Windows10安装最新的magento2.3&#xff0c;由于mg2.3对Windows支持不太友好&#xff0c;所以就打算在Windows10安装虚拟机&#xff0c;虚拟机安装CentOS7版本的Linux&#xff0c;Linux安装Lnmp环境&#xff0c;最终安装Magento2.3.虚拟机选择与安装 我这边打算…

SparkStreaming -Kafka数据源

SparkStreaming处理kafka作为数据源 所以我们要创建的是kafka的Dstream&#xff0c;那么就要使用到KafkaUtils下的createStream&#xff0c;先来看一下ctrl点进去查看&#xff0c;然后来写参数 package date_10_16_SparkStreamingimport org.apache.spark.SparkConf import or…

SparkStreaming - 无状态与有状态 updataStateByKey

无状态与有状态 简单来说&#xff0c;无状态就是每个采集周期分别采集&#xff0c;并不会把前面的采集周期的数据一起计算 有状态就是&#xff1a;把前面采集周期的也算进来&#xff0c; 比如wordcount&#xff0c;无状态统计的就是每个采集周期内的个数&#xff0c;有状态的…

flink(一个流处理,一个批处理)

流处理&#xff0c;这里用netcat来完成 package com.smalltiger.flinkWCimport org.apache.flink.api.java.utils.ParameterTool import org.apache.flink.streaming.api.scala._/*** Created by smalltiger on 2019/11/6.* flink基于流处理的一个WordCount统计*/ object Stre…

volatile学习(可见性,不保证原子性,禁止指令重排(双端检索机制))

volatile是java虚拟机提供的轻量级的同步机制&#xff1a; 1.保证可见性&#xff1a;线程之间可见性(及时通知) 2.不保证原子性 3.禁止指令重排 先了解一下jvm同步 由于JVM运行程序的实体是线程&#xff0c;而每个线程创建时JVM都会为其创建一个工作内存&#xff08;或者称为…

CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点

1、CAS底层原理&#xff1f; 自旋锁(cas思想)unsafe类&#xff0c;保证原子性靠的是unsafe类 1.首先可以看到&#xff1a; atomicInteger.getAndIncrement();getAndIncrement()的底层是 public final int getAndIncrement() {return unsafe.getAndAddInt(this, valueOffset,…

cas引出的ABA问题?如何解决?- 理解原子引用、时间戳(版本号)原子引用

ABA问题&#xff1a; 假如有两个线程1&#xff0c;2&#xff1b; cas下&#xff1a;1.线程取值完等待&#xff0c;2线程取值并把A改成B&#xff0c;有把B改成A&#xff0c;这是1线程执行会任务A还是原来的A没有发生改变&#xff0c;如果不在乎中间结果&#xff0c;只看收尾&am…

java -锁(公平、非公平锁、可重入锁【递归锁】、自旋锁)

1.公平锁、非公平锁 2.可重入锁&#xff08;递归锁&#xff09; 3.自旋锁 AtomicReference atomicReference new AtomicReference();//原子引用线程下面代码5秒钟自旋了10万次&#xff0c;还是很消耗CPU的 package HighConcurrency;import java.util.concurrent.TimeUnit; imp…

CountDownLatch,同步辅助类

public class CountDownLatchextends Object一个同步辅助类&#xff0c;在完成一组正在其他线程中执行的操作之前&#xff0c;它允许一个或多个线程一直等待。 假设定义一个计数器为 5。每个线程完成任务后计数减1计数器减为 0 则通知等待的线程。 用给定的计数 初始化 Count…

CyclicBarrier-同步辅助类

与CountDownLatch相反&#xff0c;CyclicBarrier是做加法 public class CyclicBarrierextends Object一个同步辅助类&#xff0c;它允许一组线程互相等待&#xff0c;直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中&#xff0c;这些线程必…

阻塞队列-BlockningQueue

阻塞队列的前言介绍引用于https://www.cnblogs.com/aspirant/p/8657801.html&#xff0c;写的挺好有兴趣可以看一看 一. 前言 在新增的Concurrent包中&#xff0c;BlockingQueue很好的解决了多线程中&#xff0c;如何高效安全“传输”数据的问题。通过这些高效并且线程安全的…

多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)

在使用Lock之前&#xff0c;我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法&#xff0c;与Lock配合可以实现等待/通知模式 下面用的是lock锁 …

阻塞队列,来写生产者消费者,生产一个消费一个

用阻塞队列来写&#xff0c;就不需要程序员来关心什么时候阻塞线程await&#xff0c;什么时候唤醒线程notify&#xff08;&#xff09;。 类似消息中间件 package JUC;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import…

线程池ThreadPool,线程池底层ThreadPoolExecutor方法七大参数,拒绝策略,以及实际开发中高并发下用到哪个线程池?

为什么要用线程池 基本的三个线程池的底层就是ThreadPoolExecutor类 ExecutorService threadPool Executors.newFixedThreadPool(int);//固定线程数的线程池&#xff0c;&#xff0c;执行长期的任务&#xff0c;性能好 ExecutorService threadPool Executors.newSingleThrea…

【转】2.1.1 购买阿里云服务器(Ubuntu系统)

购买阿里云服务器 优惠购买链接 戳我购买 Cpu和内存 M2对服务器配置要求比较高&#xff0c; cpu要大于等于1, 内存要大于等于2 选择Ubuntu镜像 最好用官方提供的公共镜像&#xff0c;不要用第三方的。 其他的配置 其他的配置按你自己的需求来选择。 控制台 购买完成后…