凌峰创科服务平台

传媒公司网站源码PHP如何搭建与维护?

项目概述

我们将构建一个基于 PHP + MySQL 的现代化传媒公司网站,该网站将具备以下核心功能:

传媒公司网站源码PHP如何搭建与维护?-图1
(图片来源网络,侵删)
  1. 首页:展示公司简介、核心业务、最新案例和团队风采。
  2. 服务展示:详细介绍公司的各项服务,如品牌策划、影视制作、数字营销等。
  3. 作品案例:以画廊或列表形式展示公司的成功案例,支持分类筛选。
  4. 关于我们:包含公司介绍、发展历程、企业文化、团队成员介绍。
  5. 新闻资讯:发布行业动态和公司新闻,支持分页和详情页。
  6. 联系我们:提供联系方式、在线地图和留言表单。

技术选型

  • 后端:PHP 7.4+ (推荐使用 PHP 8.0+ 以获得更好的性能)
  • 前端:HTML5, CSS3, JavaScript (使用 Bootstrap 5 快速构建响应式布局)
  • 数据库:MySQL 5.7+
  • 模板引擎:原生 PHP (为了简单易懂,不引入额外依赖,但推荐使用 Twig 或 Blade)
  • Web 服务器:Apache 或 Nginx

项目文件结构

一个清晰的项目结构是良好代码的开始。

media-company-website/
├── assets/                  # 静态资源
│   ├── css/                 # 样式文件
│   │   └── style.css       # 主样式
│   ├── js/                  # JavaScript 文件
│   │   └── main.js          # 主JS脚本
│   └── images/              # 图片资源
│       ├── logo.png
│       └── uploads/         # 上传的图片案例等
├── config/                  # 配置文件
│   └── database.php         # 数据库连接配置
├── core/                    # 核心类库
│   ├── Database.php         # 数据库操作类 (PDO封装)
│   └── Router.php           # 简单的路由类
├── includes/                # 公共组件
│   ├── header.php           # 公共头部
│   ├── footer.php           # 公共底部
│   └── navigation.php       # 导航栏
├── pages/                   # 页面文件
│   ├── index.php            # 首页
│   ├── services.php         # 服务页面
│   ├── portfolio.php        # 作品案例页面
│   ├── about.php            # 关于我们
│   ├── news.php             # 新闻列表页
│   ├── news-detail.php      # 新闻详情页
│   └── contact.php          # 联系我们
├── admin/                   # 后台管理目录 (可选)
│   └── index.php            # 后台登录入口
├── vendor/                  # Composer 依赖包
└── index.php                # 网站入口文件

核心代码实现

数据库配置 (config/database.php)

<?php
// config/database.php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'your_password');
define('DB_NAME', 'media_company_db');
try {
    $pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
    // 设置PDO错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 设置默认的获取数据方式为关联数组
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die("连接失败: " . $e->getMessage());
}
?>

数据库操作类 (core/Database.php)

这是一个简单的PDO封装,用于简化数据库查询。

<?php
// core/Database.php
require_once __DIR__ . '/../config/database.php';
class Database {
    private static $instance = null;
    private $pdo;
    private function __construct() {
        // $pdo 连接已在 database.php 中建立
        global $pdo;
        $this->pdo = $pdo;
    }
    // 单例模式获取实例
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    // 执行查询
    public function query($sql, $params = []) {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt;
    }
    // 获取所有结果
    public function fetchAll($sql, $params = []) {
        return $this->query($sql, $params)->fetchAll();
    }
    // 获取单个结果
    public function fetch($sql, $params = []) {
        return $this->query($sql, $params)->fetch();
    }
    // 获取最后插入的ID
    public function lastInsertId() {
        return $this->pdo->lastInsertId();
    }
}
?>

数据库表结构 (示例)

您需要先创建数据库和表,这里以 cases (案例表) 和 news (新闻表) 为例。

-- 创建数据库
CREATE DATABASE media_company_db;
USE media_company_db;
-- 案例表
CREATE TABLE cases (
    id INT AUTO_INCREMENT PRIMARY KEY,VARCHAR(255) NOT NULL,
    category VARCHAR(100) NOT NULL,
    description TEXT,
    image_url VARCHAR(255) NOT NULL,
    client_name VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 新闻表
CREATE TABLE news (
    id INT AUTO_INCREMENT PRIMARY KEY,VARCHAR(255) NOT NULL,
    summary TEXT,
    content TEXT NOT NULL,
    image_url VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入一些示例数据
INSERT INTO cases (title, category, description, image_url, client_name) VALUES
('XX品牌年度宣传片', '影视制作', '为XX品牌打造的年度形象宣传片,展现了品牌的核心价值...', 'uploads/case1.jpg', 'XX科技有限公司'),
('YY产品发布会', '活动策划', '全程策划并执行了YY新产品的线上发布会...', 'uploads/case2.jpg', 'YY集团');
INSERT INTO news (title, summary, content, image_url) VALUES
('2025年数字营销趋势报告', '探讨最新的数字营销策略和工具...', '(这里是新闻的详细内容)...', 'uploads/news1.jpg'),
('公司乔迁新址,再启新程', '我们很高兴地宣布,公司已正式迁至...', '(这里是新闻的详细内容)...', 'uploads/news2.jpg');

入口文件与路由 (index.php)

我们使用一个简单的 index.php 作为入口,根据 page 参数来加载不同的页面。

传媒公司网站源码PHP如何搭建与维护?-图2
(图片来源网络,侵删)
<?php
// index.php
// 定义根目录
define('ROOT_PATH', __DIR__);
// 自动加载类
spl_autoload_register(function ($class_name) {
    $file = ROOT_PATH . '/core/' . $class_name . '.php';
    if (file_exists($file)) {
        require_once $file;
    }
});
// 获取请求的页面
$page = isset($_GET['page']) ? $_GET['page'] : 'index';
// 页面映射
$pages = [
    'index' => 'index.php',
    'services' => 'services.php',
    'portfolio' => 'portfolio.php',
    'about' => 'about.php',
    'news' => 'news.php',
    'news-detail' => 'news-detail.php',
    'contact' => 'contact.php',
    // 后台页面
    'admin' => 'admin/index.php'
];
// 安全检查,防止目录遍历攻击
$page = preg_replace('/[^a-zA-Z0-9_-]/', '', $page);
if (array_key_exists($page, $pages)) {
    $file_path = ROOT_PATH . '/pages/' . $pages[$page];
    if (file_exists($file_path)) {
        require_once $file_path;
    } else {
        http_response_code(404);
        echo "页面不存在";
    }
} else {
    http_response_code(404);
    echo "页面不存在";
}
?>

公共组件 (includes/header.php)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"><?php echo $page_title ?? '传媒公司 - 专业品牌营销解决方案'; ?></title>
    <!-- 引入 Bootstrap 5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- 引入自定义CSS -->
    <link rel="stylesheet" href="/assets/css/style.css">
</head>
<body>
    <!-- 导航栏 -->
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <div class="container">
            <a class="navbar-brand" href="/">传媒公司</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav ms-auto">
                    <li class="nav-item"><a class="nav-link" href="/">首页</a></li>
                    <li class="nav-item"><a class="nav-link" href="/index.php?page=services">服务</a></li>
                    <li class="nav-item"><a class="nav-link" href="/index.php?page=portfolio">案例</a></li>
                    <li class="nav-item"><a class="nav-link" href="/index.php?page=about">关于我们</a></li>
                    <li class="nav-item"><a class="nav-link" href="/index.php?page=news">新闻</a></li>
                    <li class="nav-item"><a class="nav-link" href="/index.php?page=contact">联系我们</a></li>
                </ul>
            </div>
        </div>
    </nav>
    <!-- 页面内容容器 -->
    <div class="container my-5">

公共组件 (includes/footer.php)

    </div> <!-- /.container -->
    <footer class="bg-dark text-white py-4 mt-5">
        <div class="container text-center">
            <p>&copy; <?php echo date('Y'); ?> 传媒公司. 保留所有权利.</p>
        </div>
    </footer>
    <!-- 引入 Bootstrap 5 JS -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <!-- 引入自定义JS -->
    <script src="/assets/js/main.js"></script>
</body>
</html>

页面示例:首页 (pages/index.php)

<?php
// pages/index.php
// 设置页面标题
$page_title = "首页 - 传媒公司";
// 引入头部
require_once __DIR__ . '/../includes/header.php';
// 获取数据库实例
$db = Database::getInstance();
// 获取最新案例
$latest_cases = $db->fetchAll("SELECT * FROM cases ORDER BY created_at DESC LIMIT 3");
// 获取最新新闻
$latest_news = $db->fetchAll("SELECT * FROM news ORDER BY created_at DESC LIMIT 3");
?>
<!-- Hero Section -->
<div class="jumbotron bg-cover bg-center text-white" style="background-image: linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url('/assets/images/hero-bg.jpg'); height: 500px; display: flex; align-items: center; justify-content: center;">
    <div class="text-center">
        <h1 class="display-4">创意驱动品牌,科技引领未来</h1>
        <p class="lead">我们是一家专注于品牌策划、影视制作和数字营销的综合性传媒公司。</p>
        <a href="/index.php?page=contact" class="btn btn-primary btn-lg">立即合作</a>
    </div>
</div>
<!-- Services Section -->
<div class="my-5">
    <h2 class="text-center mb-4">我们的服务</h2>
    <div class="row">
        <div class="col-md-4">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">品牌策划</h5>
                    <p class="card-text">从市场分析到品牌定位,为您提供全方位的品牌战略解决方案。</p>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">影视制作</h5>
                    <p class="card-text">专业的策划、拍摄、后期团队,打造高品质的视觉内容。</p>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title">数字营销</h5>
                    <p class="card-text">整合社交媒体、搜索引擎等渠道,提升您的线上影响力。</p>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- Portfolio Preview Section -->
<div class="my-5 bg-light p-4 rounded">
    <h2 class="text-center mb-4">精选案例</h2>
    <div class="row">
        <?php foreach ($latest_cases as $case): ?>
        <div class="col-md-4 mb-3">
            <div class="card">
                <img src="<?php echo htmlspecialchars($case['image_url']); ?>" class="card-img-top" alt="<?php echo htmlspecialchars($case['title']); ?>">
                <div class="card-body">
                    <h5 class="card-title"><?php echo htmlspecialchars($case['title']); ?></h5>
                    <p class="card-text"><?php echo htmlspecialchars($case['description']); ?></p>
                    <a href="/index.php?page=portfolio" class="btn btn-outline-primary">查看更多</a>
                </div>
            </div>
        </div>
        <?php endforeach; ?>
    </div>
</div>
<!-- News Preview Section -->
<div class="my-5">
    <h2 class="text-center mb-4">最新资讯</h2>
    <div class="row">
        <?php foreach ($latest_news as $news): ?>
        <div class="col-md-6 mb-3">
            <div class="card">
                <div class="row g-0">
                    <div class="col-md-4">
                        <img src="<?php echo htmlspecialchars($news['image_url']); ?>" class="img-fluid rounded-start h-100 object-fit-cover" alt="<?php echo htmlspecialchars($news['title']); ?>">
                    </div>
                    <div class="col-md-8">
                        <div class="card-body">
                            <h5 class="card-title"><?php echo htmlspecialchars($news['title']); ?></h5>
                            <p class="card-text"><?php echo htmlspecialchars($news['summary']); ?></p>
                            <a href="/index.php?page=news-detail&id=<?php echo $news['id']; ?>" class="btn btn-sm btn-primary">阅读更多</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <?php endforeach; ?>
    </div>
</div>
<?php
// 引入底部
require_once __DIR__ . '/../includes/footer.php';
?>

页面示例:联系我们 (pages/contact.php)

<?php
// pages/contact.php
$page_title = "联系我们 - 传媒公司";
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name']);
    $email = trim($_POST['email']);
    $message = trim($_POST['message']);
    // 简单验证
    if (!empty($name) && !empty($email) && !empty($message)) {
        // 这里应该将数据存入数据库或发送邮件
        // 为了演示,我们只输出成功信息
        $success_message = "感谢您的留言,我们会尽快与您联系!";
    } else {
        $error_message = "请填写所有必填项。";
    }
}
require_once __DIR__ . '/../includes/header.php';
?>
<div class="row">
    <div class="col-md-6">
        <h2>联系方式</h2>
        <p><strong>地址:</strong> 北京市朝阳区XX大厦A座1001室</p>
        <p><strong>电话:</strong> 010-12345678</p>
        <p><strong>邮箱:</strong> contact@media-company.com</p>
        <!-- 使用第三方地图服务,如高德或百度 -->
        <div id="map" style="width: 100%; height: 300px; margin-top: 20px; background-color: #f0f0f0;">
            <!-- 地图图片占位符 -->
            <img src="https://via.placeholder.com/600x300?text=Map+Placeholder" alt="公司地图" style="width: 100%; height: 100%; object-fit: cover;">
        </div>
    </div>
    <div class="col-md-6">
        <h2>给我们留言</h2>
        <?php if (isset($success_message)): ?>
            <div class="alert alert-success"><?php echo $success_message; ?></div>
        <?php endif; ?>
        <?php if (isset($error_message)): ?>
            <div class="alert alert-danger"><?php echo $error_message; ?></div>
        <?php endif; ?>
        <form action="/index.php?page=contact" method="post">
            <div class="mb-3">
                <label for="name" class="form-label">您的姓名</label>
                <input type="text" class="form-control" id="name" name="name" required>
            </div>
            <div class="mb-3">
                <label for="email" class="form-label">电子邮箱</label>
                <input type="email" class="form-control" id="email" name="email" required>
            </div>
            <div class="mb-3">
                <label for="message" class="form-label">留言内容</label>
                <textarea class="form-control" id="message" name="message" rows="5" required></textarea>
            </div>
            <button type="submit" class="btn btn-primary">提交留言</button>
        </form>
    </div>
</div>
<?php
require_once __DIR__ . '/../includes/footer.php';
?>

后续开发建议

  1. 后台管理系统

    • 创建一个独立的 admin 目录,通过简单的身份验证(如 session)保护。
    • 开发增删改查功能,让管理员可以方便地管理新闻、案例、服务等内容,而无需直接操作数据库。
  2. 内容管理系统

    • 对于更复杂的需求,可以考虑集成成熟的 CMS 框架,如 WordPressDrupal,它们有强大的插件和主题生态,能极大提高开发效率。
  3. 前端优化

    • 使用 Vue.jsReact 等现代前端框架构建单页应用,提升用户体验。
    • 实现图片懒加载、SEO优化等。
  4. 安全性

    传媒公司网站源码PHP如何搭建与维护?-图3
    (图片来源网络,侵删)
    • 对所有用户输入进行过滤和验证,防止 SQL 注入和 XSS 攻击。
    • 使用 HTTPS 加密网站。

这份源码提供了一个坚实的基础,您可以根据具体需求进行修改和扩展,祝您开发顺利!

分享:
扫描分享到社交APP
上一篇
下一篇