برنامه نویسی

ساخت فروشگاه تجارت الکترونیک: راهنمای گام به گام با Solidjs و Medusa

معرفی

اصطلاح “تجارت الکترونیک” به سادگی به فروش آنلاین کالاها و خدمات اشاره دارد.

مردم می توانند از یک فروشگاه تجارت الکترونیک برای خرید و فروش کالاهای ملموس (فیزیکی)، محصولات دیجیتال یا خدمات آنلاین استفاده کنند. شما با استفاده از Solid (به عنوان ویترین فروشگاه) و Medusa (به عنوان باطن) یک فروشگاه تجارت الکترونیک خواهید ساخت.

با ایجاد این برنامه، یاد خواهید گرفت:

  1. نحوه راه اندازی سرور مدوزا و ادمین مدوزا.

  2. چگونه با استفاده از Solid یک فروشگاه تجارت الکترونیک ایجاد کنیم.

  3. نحوه ادغام جامد با مدوسا

  4. نحوه حلقه زدن روی آرایه ای از اشیا با استفاده از <For> جزء.

  5. نحوه ایجاد مسیریابی سمت کلاینت با استفاده از Solid Router.

  6. چگونه با استفاده از Material UI UI های زیبا ایجاد کنیم

و خیلی بیشتر…

Medusa یک موتور تجارت الکترونیکی قابل ترکیب متن باز برای توسعه دهندگانی است که می خواهند مالکیت پشته تجارت الکترونیکی خود را به دست بگیرند. مدوسا از سه بخش تشکیل شده است:

  • باطن بی سر.

  • داشبورد مدیریت

  • ویترین.

Medusa یک پلت فرم همه کاره تجارت الکترونیک جاوا اسکریپت است که توسعه دهندگان را قادر می سازد بدون توجه به چارچوبی که برای ساخت برنامه های وب خود استفاده می کنند از ویژگی ها و قابلیت های آن استفاده کنند.

Solid یک چارچوب جاوا اسکریپت پرسرعت است که از دستکاری dom مجازی جلوگیری می کند. Solid یک چارچوب جاوا اسکریپت برای ساخت برنامه های کاربردی وب تعاملی است.

با Solid، می‌توانید از دانش موجود در HTML و جاوا اسکریپت برای ساخت مؤلفه‌هایی استفاده کنید که می‌توانند در سراسر برنامه‌تان دوباره استفاده شوند. Solid ابزارهایی را برای تقویت اجزای شما با واکنش‌پذیری ارائه می‌کند: کد جاوا اسکریپت اعلامی که رابط کاربر را با داده‌هایی که استفاده می‌کند و ایجاد می‌کند پیوند می‌دهد.

بیایید با استفاده از Solid یک وب سایت تجارت الکترونیک جالب ایجاد کنیم.

شروع کار با مدوسا

در این بخش از این مقاله، من قصد دارم به شما نشان دهم که چگونه سرور مدوسا را ​​بر روی دستگاه محلی خود راه اندازی کنید.

مرحله 1: ابزار Medusa CLI را نصب کنید

Medusa CLI ابزاری است که به شما امکان می دهد دستورات مهم را هنگام کار با مدوسا اجرا کنید.

برای استفاده از مدوسا ابتدا باید ابزار CLI را نصب کنید که برای ایجاد سرور جدید مدوسا استفاده می شود.

با استفاده از هر کدام npm یا yarn، می توانیم Medusa CLI را نصب کنیم، اما این آموزش استفاده خواهد کرد npm. هر ترمینال دلخواه خود را باز کنید و دستور زیر را اجرا کنید:

npm install @medusajs/medusa-cli -g
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: یک سرور فروشگاه مدوسا جدید ایجاد کنید

سرور فروشگاه جزء اصلی است که تمام منطق و داده های فروشگاه را در خود جای می دهد.

این سرور شامل تمام عملکردهای مربوط به گردش کار پرداخت فروشگاه شما خواهد بود. مدیریت سبد خرید، حمل و نقل، حمل و نقل، ارائه دهندگان پرداخت، مدیریت کاربر، و ویژگی های دیگر گنجانده شده است.

دستور زیر را برای ایجاد سرور فروشگاه مدوسا جدید خود اجرا کنید:

medusa new my-medusa-store --seed
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نکاتی که در دستور قبلی باید به آن توجه کنید:

  • my-medusa-store نشان دهنده نام پروژه است که می توانید آن را به هر چیزی که می خواهید تغییر دهید.

  • را --seed دستور پایگاه داده شما را با برخی از داده های نمونه برای شروع کار شما می سازد. از جمله فروشگاه، حساب سرپرست، منطقه و محصولات با انواع مختلف.

مرحله 3: سرور فروشگاه مدوسا را ​​تست کنید

برای تست سرور فروشگاه مدوسا، سی دی را وارد کنید my-medusa-storeو دستور زیر را اجرا کنید:

medusa develop
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هدایت به localhost:9000/store/products/ در مرورگر شما، و موارد زیر باید ظاهر شود:

ساخت فروشگاه تجارت الکترونیک راهنمای گام به گام با Solidjs.png%20align=%22left%22

مرحله 4: مدیریت مدوسا را ​​تنظیم کنید

داشبورد مدیریت مدوسا به ما اجازه می دهد تا انواع عملکردها را روی داده های سیستم خود انجام دهیم. راهی برای ایجاد محصولات جدید، ویرایش محصولات، حذف محصولات، مشاهده سفارشات و غیره برای شما فراهم می کند.

ادمین مدوسا به سرور فروشگاه مدوسا متصل است، بنابراین قبل از ادامه کار با ادمین ابتدا مطمئن شوید که سرور فروشگاه مدوسا را ​​با موفقیت نصب و آزمایش کرده اید.

برای نصب ادمین، با شبیه سازی مخزن ادمین Github شروع کنید:

git clone https://github.com/medusajs/admin medusa-admin
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، سی دی را وارد کنید medusa-admin دایرکتوری و با استفاده از npm وابستگی ها را نصب کنید:

npm install
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 5: ادمین مدوسا را ​​تست کنید

برای اجرای ادمین مدوسا، دستور زیر را تایپ کنید:

npm start
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون به مسیر بروید localhost:7000 در مرورگر خود برای مشاهده صفحه مدیریت:

ساخت فروشگاه تجارت الکترونیک راهنمای گام به گام با Solidjs.png%20align=%22left%22

ایمیل است admin@medusa-test.com و رمز عبور است supersecret.

توجه داشته باشید: قبل از اینکه بتوانید ادمین مدوسا را ​​آزمایش کنید، باید مطمئن شوید که سرور مدوزا در حال اجرا است.

ساخت ویترین فروشگاه با جامد

در این بخش از مقاله، نحوه استفاده از Solidjs برای ساخت ویترین فروشگاه برای برنامه تجارت الکترونیک خود را نشان خواهم داد.

مرحله 1: یک برنامه Solid جدید ایجاد کنید

دستور زیر را در ترمینال خود اجرا کنید تا یک برنامه Solid جدید ایجاد کنید:

npx degit solidjs/templates/js solid-app
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعد، cd به solid-app و وابستگی های آن را نصب کنید:

cd solid-app
npm install
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از اتمام نصب، سرور توسعه محلی خود را راه اندازی کنید:

npm run dev
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: همه وابستگی های ضروری را نصب کنید

برای ساخت سریعتر اپلیکیشن تجارت الکترونیک، به برخی وابستگی ها نیاز دارید.

ما قادر خواهیم بود به راحتی رابط های کاربری خیره کننده ای با کمک ایجاد کنیم رابط کاربری مواد. برای نصب Material UI for Solid دستور زیر را اجرا کنید:

npm install @suid/material @suid/icons-material
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روتر جامد یک روتر جهانی برای Solidjs است که چه روی کلاینت و چه روی سرور رندر می‌شود. برای نصب Solid Router دستور زیر را اجرا کنید:

npm i @solidjs/router
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدوسا JS Client یک SDK است که راهی آسان برای دسترسی به API مدوزا را فراهم می کند. برای نصب مدوسا JS Client دستور زیر را اجرا کنید:

npm install @medusajs/medusa-js
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 3: Solid را با Medusa ادغام کنید

در ریشه پروژه برنامه جامد خود، a ایجاد کنید .env فایل و محتوای زیر را به آن اضافه کنید:

VITE_baseUrl=http://localhost:9000
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

baseUrl متغیر محیطی URL سرور مدوسای شما است.

مدوزا از Cross-Origin Resource Sharing (CORS) استفاده می کند تا فقط به منابع خاصی اجازه دسترسی به سرور را بدهد.

باید Vite را پیکربندی کنید زیرا مدوزا به طور پیش‌فرض فقط دسترسی به ویترین فروشگاه در پورت را می‌پذیرد 8000، در حالی که پورت پیش فرض Vite است 5173.

پیمایش به vite.config.json و مطالب زیر را جایگزین کنید:

import { defineConfig } from 'vite';
import solidPlugin from 'vite-plugin-solid';

//https://vitejs.dev/config/
export default defineConfig({
  plugins: [solidPlugin()],
  server: {
    port: 8000,
  },
  build: {
    target: 'esnext',
  },
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک برگه مرورگر جدید باز کنید و به آن بروید http://localhost:8000 پس از راه اندازی مجدد سرور توسعه خود.

توجه داشته باشید: اگر Vite برای استفاده از شماره پورت مورد نیاز پیکربندی نشده باشد، هر درخواستی که ویترین فروشگاه شما به سرور ارائه کند توسط مدوزا رد خواهد شد. 8000.

در مرحله بعد، ابزاری ایجاد کنید که استفاده مجدد از نمونه مدوسا JS Client را در سراسر برنامه شما فعال می کند.

یک فایل جدید ایجاد کنید src/utils/client.js و مطالب زیر را اضافه کنید:

import Medusa from "@medusajs/medusa-js"

const medusaClient = new Medusa({ baseUrl: import.meta.env.VITE_MEDUSA_SERVER_URL })

export { medusaClient }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 4: ساخت اجزای فروشگاه

در این بخش از این مقاله، کامپوننت storefront را برای اپلیکیشن خود خواهیم ساخت. یکی از مولفه هایی که قرار است ایجاد کنیم این است:

  • جزء سرصفحه: یک پوشه جدید در src دایرکتوری و تماس بگیرید components. سپس در داخل components پوشه، یک پوشه جدید بسازید Header.jsx فایل و محتوای زیر را اضافه کنید:
//Header.jsx
import { A } from "@solidjs/router";
import { Box } from "@suid/material";
import { Typography, IconButton, AppBar, Toolbar } from "@suid/material";
import ShoppingCartIcon from "@suid/icons-material/ShoppingCart";

const Header = () => {
  const cartCount = localStorage.getItem("cartCount") ?? 0;

  return (
    <Box>
      <AppBar position="fixed" color="primary">
        <Toolbar>
          <Box
            sx={{
              display: "flex",
              width: "100%",
              alignItems: "center",
              flexDirection: {
                lg: "row",
                md: "column",
                sm: "column",
                xs: "row",
              },
              justifyContent: "space-between",
            }}
          >
            <Typography
              variant="h6"
              component="h6"
              sx={{
                marginBottom: { lg: "0", md: "0.7rem", sm: "0.7rem", xs: "0" },
              }}
            >
              Reuben09
            </Typography>
          </Box>

          <Box
            sx={{
              display: "flex",
              alignItems: "center",
              marginBottom: { lg: "0", md: "0.7rem", sm: "0.7rem", xs: "0" },
            }}
          >
            <A href="/">
              <Typography
                sx={{
                  marginRight: "1rem",
                  fontSize: "1.1rem",
                  cursor: "pointer",
                }}
              >
                Home
              </Typography>
            </A>
            <A href="/products">
              <Typography
                sx={{
                  marginRight: "1rem",
                  fontSize: "1.1rem",
                  cursor: "pointer",
                }}
              >
                Products
              </Typography>
            </A>
            <IconButton>
              <ShoppingCartIcon sx={{ color: "#fff" }} />
            </IconButton>
            <p>{cartCount}</p>
          </Box>
        </Toolbar>
      </AppBar>
    </Box>
  );
};

export default Header;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • جزء لیست محصولات: این مؤلفه لیستی از محصولات دریافت شده از سرور مدوزا را با استفاده از medusaClient تابع ابزار، با استفاده از Solid Router، مؤلفه همچنین پیوندهایی را به محصولات جداگانه ایجاد می کند.

    درون components پوشه، یک فایل جدید بسازید و آن را فراخوانی کنید ProductList.jsx. جدید ایجاد شده را باز کنید ProductList.jsx فایل و محتوای زیر را اضافه کنید:

//ProductList.jsx
import { createEffect, createSignal, For } from "solid-js";
import { A } from "@solidjs/router";
import { Box, Typography, Link } from "@suid/material";
import { medusaClient } from "../utils/client.js";

function ProductList() {
  const [products, setProducts] = createSignal([]);
  createEffect(() => {
    const fetchProducts = async () => {
      const res = await medusaClient.products.list();
      setProducts(res.products);
    };
    fetchProducts();
  });
  return (
    <>
      <Box
        sx={{
          marginTop: "2rem",
          paddingLeft: { lg: "4rem", xs: "1.5rem" },
          paddingRight: { lg: "4rem", xs: "1.5rem" },
        }}
        component="section"
      >
        <Typography
          sx={{
            textAlign: "center",
            fontSize: "1.5rem",
            marginBottom: "2rem",
          }}
        >
          Featured Products
        </Typography>

        <Box sx={{ margin: "0 2rem" }}>
          <Box
            sx={{
              display: "grid",
              gridTemplateColumns: "1fr 1fr 1fr 1fr",
              gridGap: "2rem",
            }}
          >
            <For each={products()}>
              {(product) => (
                <Box
                  component="div"
                  sx={{
                    backgroundColor: "rgb(231, 231, 231)",
                    height: "350px",
                    padding: "0.5rem",
                  }}
                >
                  <Box component="div" sx={{ height: "12rem" }}>
                    <Box
                      component="img"
                      src={product?.thumbnail}
                      sx={{
                        height: "12rem",
                        width: "100%",
                        objectFit: "cover",
                      }}
                    />
                  </Box>
                  <Typography
                    sx={{
                      padding: "1rem 0",
                      textAlign: "center",
                      fontWeight: "600",
                    }}
                  >
                    {product?.title}
                  </Typography>
                  <Typography sx={{ textAlign: "center" }}>
                    &euro; {product?.variants[0].prices[0].amount / 100}
                  </Typography>
                  <Box sx={{ textAlign: "center" }}>
                    <Link underline="always">
                      <A href={`/products/${product.id}`}>See product</A>
                    </Link>
                  </Box>
                </Box>
              )}
            </For>
          </Box>
        </Box>
      </Box>
    </>
  );
}

export default ProductList;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • جزء خبرنامه: در components پوشه جدید ایجاد کنید NewsLetter.jsx فایل و محتوای زیر را اضافه کنید:
import {
    Grid,
    Box,
    Typography,
    Input,
    IconButton,
    Button
  } from "@suid/material";
function NewsLetter() {
    return (
      <Box
        component="section"
        sx={{
          display: "flex",
          alignItems: "center",
          justifyContent: "center",
          flexDirection: "column",
          paddingLeft: { lg: "4rem", xs: "2rem" },
          paddingRight: { lg: "4rem", xs: "2rem" }
        }}
      >
        <Box component="form">
          <Typography
            variant="h2"
            mt={10}
            sx={{
              textAlign: "center",
              fontSize: "1.5rem",
              marginBottom: "0.3rem",
            }}
          >
            {" "}
            Subscribe to our newsletter
          </Typography>
          <Typography sx={{textAlign: "center", marginBottom: "1rem" }}>
            Get 10% off your first purchase and stay on top of the latest in
            Debutify, it's win-win-WIN!
          </Typography>
          <Box sx={{marginBottom: "2rem" }}>
            <Input
              placeholder="First Name"
              sx={{textAlign: "center", width: "100%" }}
            />
          </Box>
          <Box sx={{marginBottom: "2rem" }}>
            <Input
              placeholder="Your Email"
              sx={{textAlign: "center", width: "100%" }}
            />
          </Box>
          <Box sx={{textAlign: "center", width: "100%", marginBottom: "1rem" }}>
            <IconButton>
              <Button variant="contained" color="primary">
                Subscribe
              </Button>
            </IconButton>
          </Box>
        </Box>
      </Box>
    );
  }

  export default NewsLetter;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • جزء پاورقی: همچنین در components پوشه جدید ایجاد کنید Footer.jsx فایل و این محتوا را اضافه کنید:
import { Box, Typography } from "@suid/material";
import NewsLetter from "./NewsLetter";

function Footer (){
    return (
        <>
       <Box component="section" sx={{ marginBottom: "2rem" }}>
        <NewsLetter />
      </Box>
      <Box
      component="div"
      sx={{textAlign: "center", backgroundColor: "#1976D2", padding: "1rem" }}
      color="primary"
    >
      <Box
        component="a"
        sx={{textAlign: "center", color: "#fff" }}
        href="https://github.com/Reuben09"
      >
        created by Reuben09
      </Box>
    </Box>
        </>
    )
}

export default Footer;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 5: صفحات فروشگاهی را ایجاد کنید

از اینجا کار آسان می شود، تنها کاری که باید انجام دهید این است که اجزایی را که در بخش قبلی ایجاد کرده اید در این صفحات وارد کنید:

  • صفحه نخست: یک پوشه جدید در src دایرکتوری و تماس بگیرید pages. سپس در داخل pages پوشه جدید ایجاد کنید Home.jsx فایل و محتوای زیر را اضافه کنید:
import { Box, Typography, IconButton, Button } from "@suid/material";
import ProductList from '../component/ProductList'
import Footer from '../component/Footer'

function Home (){
    return <div>
        <Box
        sx={{
          backgroundImage:
            "url(https://images.unsplash.com/photo-1552346154-21d32810aba3?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=870&q=80)",
          width: "100%",
          height: "80vh",
          backgroundSize: "cover",
          backgroundPosition: "center",
          backgroundRepeat: "no-repeat",
          marginBottom: "5rem"
        }}
      >
        <Box
          sx={{
            width: "100%",
            height: "80vh",
            backgroundColor: "rgba(25, 118, 210, 0.2)",
            display: "flex",
            flexDirection: "column",
            alignItems: "center",
            justifyContent: "center"
          }}
        >
          <Typography
            sx={{
              fontSize: "3rem",
              color: "#ffffff",
            }}
          >
            Reuben09
          </Typography>
          <Typography
            sx={{
              fontSize: "3rem",
              color: "#ffffff",
            }}
          >
            Sneakers
          </Typography>
          <Typography sx={{textAlign: "center", color: "#ffffff" }}>
            Users of the highest converting shopify theme deserve a lifestyle to
            match!
          </Typography>
          <Box sx={{marginTop: "1rem" }}>
            <IconButton>
              <Button
                variant="contained"
                color="primary"
                sx={{marginRight: "0.5rem" }}
              >
                Shop now
              </Button>
            </IconButton>
            <IconButton>
              <Button
                variant="contained"
                color="primary"
                sx={{marginLeft: "0.5rem" }}
              >
                Learn more
              </Button>
            </IconButton>
          </Box>
        </Box>
      </Box>
      <Box component="div" sx={{marginBottom: "2rem" }}>
      <ProductList />
      </Box>
      <Box section="footer">
        <Footer />
      </Box>
    </div>
}

export default Home;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • صفحه محصولات: همچنین در pages پوشه، یک پوشه جدید بسازید Products.jsx فایل و محتوای زیر را اضافه کنید:
import ProductList from '../component/ProductList'
import Footer from '../component/Footer'

function Products (){
  return <div>
    <ProductList />
    <Footer />
  </div>
}

export default Products;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • صفحه تک محصول: این صفحه جایی است که اقلام محصول را بر اساس شناسه آنها واکشی می کنیم و جزئیات آنها را نمایش می دهیم. همچنین به کاربران امکان می دهد محصول را به سبد خرید خود اضافه کنند

    جدید بساز SingleProduct.jsx فایل در pages پوشه و در محتوای زیر پیست کنید:

import { useParams } from "@solidjs/router";
import { createEffect, createSignal } from 'solid-js'
import {Container, Box, Grid, IconButton, Button, Typography} from '@suid/material';
import Footer from '../component/Footer'
import { medusaClient } from '../utils/client.js'

const addProduct = async (cartId, product) => {
    const { cart } = await medusaClient.carts.lineItems.create(cartId, {
        variant_id: product()?.variants[0].id,
        quantity: 1
    })
    console.log(cart);
    localStorage.setItem('cartCount', cart.items.length)
    setTimeout(window.location.reload(), 5000)
}


function SingleProduct (){
    const [productItem, setProductItem] = createSignal();
    const [regionId, setRegionId] = createSignal("");
    const params = useParams();
    const productId = params.productId;

    createEffect(()=> {
        const fetchSingleProduct = async () => {
            const results = await medusaClient.products.retrieve(productId);
            setProductItem(results.product)
        }

        const fetchRegions = async () => {
            const results = await medusaClient.regions.list()
            setRegionId(results.regions[1].id)
        }

        fetchSingleProduct()
        fetchRegions()
      })

      const handleAddToCart = async () => {
        const cartId = localStorage.getItem('cartId');

        if (cartId) {
            addProduct(cartId, productItem)
        } else {
            const { cart } = await medusaClient.carts.create({ region_id: regionId })
            localStorage.setItem('cartId', cart.id);
            addProduct(cart.id, productItem)
        }
    }
        return <>
        <Box sx={{marginTop: "7rem"}}>
          <Container maxWidth="sm">
          <Grid container spacing={2}>
             <Grid item xs={6}>
             <Box>
                      <img sx={{width:"500px"}}
                          alt={productItem()?.title}
                          src={productItem()?.thumbnail} />
                  </Box>
                  </Grid>
                  <Grid item xs={6}>
                  <Box sx={{marginTop: "2rem", display: "flex", justifyContent: "flex-start", alignItems: "flex-start", flexDirection: "column"}}>
                      <Typography variant="h5" mb={2}>{productItem()?.title}</Typography>
                      <Typography mb={2}>&euro; {productItem()?.variants[0].prices[0].amount / 100 }</Typography>
                      <Typography mb={2}>{productItem()?.description}</Typography>
                      <IconButton>
                        <Button onClick={handleAddToCart} variant="contained" color="primary">
                          Add to cart
                        </Button>
                      </IconButton>
                  </Box>
                  </Grid>
          </Grid>
          </Container>
        </Box>
        <Footer />
        </>
}

export default SingleProduct;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 6: ثبت صفحات فروشگاه:

در این بخش از این مقاله، ما قصد داریم تا با استفاده از Solid Router، مسیریابی سمت کلاینت را در برنامه خود فعال کنیم.

index.jsx نقطه ورود ما است، بنابراین ما وارد خواهیم کرد Router و جزء App را درون آن قرار دهید.

باز کن index.jsx و با محتوای زیر جایگزین کنید:

/* @refresh reload */
import { render } from 'solid-js/web';
import { Router } from "@solidjs/router";
import './index.css';
import App from './App';

const root = document.getElementById('root');

if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
  throw new Error(
    'Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got mispelled?',
  );
}

render(() => 
<Router>
<App />
</Router>, root);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خودشه! اکنون می توانید سه صفحه را ثبت کنید. باز کن App.jsx و با محتوای زیر جایگزین کنید:

import { Routes, Route } from "@solidjs/router"
import { lazy } from "solid-js";
import Header from './component/Header'
const Products = lazy(() => import("./pages/Products"));
const Home = lazy(() => import("./pages/Home"));
const SingleProduct = lazy(() => import("./pages/SingleProduct"));

function App() {
  return (
    <div>
      <Header />
      <Routes>
      <Route path="/" component={Home} />
      <Route path="/products" component={Products}  />
      <Route path="/products/:productId" component={SingleProduct}  />
      </Routes>
    </div>
  );
}

export default App;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 7: ویترین فروشگاه را تست کنید

سرور خود را مجدداً راه اندازی کنید و یک برگه مرورگر جدید در آن باز کنید http://localhost:8000 و این چیزی است که مرورگر شما باید نمایش دهد:

صفحه نخست:

1678350753 384 ساخت فروشگاه تجارت الکترونیک راهنمای گام به گام با Solidjs.png%20align=%22left%22

صفحه محصولات: در نوار ناوبری خود، روی محصولات کلیک کنید تا به صفحه محصولات برسید:

1678350753 68 ساخت فروشگاه تجارت الکترونیک راهنمای گام به گام با Solidjs.png%20align=%22left%22

صفحه SingleProducts: برای ورود به صفحه تک محصول بر روی هر یک از محصولات کلیک کنید:

1678350754 329 ساخت فروشگاه تجارت الکترونیک راهنمای گام به گام با Solidjs.png%20align=%22left%22

نتیجه

پس از معرفی مدوسا و سالید در این مقاله، نحوه ایجاد یک وب سایت تجارت الکترونیک با استفاده از مدوسا (به عنوان باطن) و سالید (به عنوان ویترین فروشگاه) را از ابتدا نشان دادم.

ارجاع

اسناد مدوسا – https://docs.medusajs.com/introduction

روتر جامد – https://github.com/solidjs/solid-router

رابط کاربری مواد – https://suid.io/getting-started/usage

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا