ホームページ  >  記事  >  ウェブフロントエンド  >  Latio Team: 一緒に構築するテクノロジーハッカーのコミュニティ

Latio Team: 一緒に構築するテクノロジーハッカーのコミュニティ

DDD
DDDオリジナル
2024-10-31 01:50:02382ブラウズ

これは Wix Studio Challenge: Community Edition への提出物です。

私のコミュニティプラットフォーム

Latio Team は、ラテンアメリカを拠点とするテクノロジービルダー向けに構築されたコミュニティです。ハッカソンに参加しながら、参加し、学び、成長し、つながりを築く場所です。コミュニティ ページには次の機能が含まれています:

  1. 人材プール: メンバーは、採用担当者や他の起業家に見てもらうことを目的とした公開ページにプロフィールを掲載します。
  2. 求人情報: メンバー向けの最新のリモート求人を紹介する求人掲示板 (RemoteOK が提供する API)。メンバーはコミュニティ ページ内の求人投稿を確認して応募できます。
  3. ハッカソンのリスト: メンバー向けに新しいハッカソンの機会を共有および投稿する場所です。
  4. 接続: 他のメンバーと話したり、仕事の最新情報を投稿したり、新しいコラボレーターを見つけたりするためのスペースです。
  5. 仕事の問い合わせ: 各メンバーのプロフィールには連絡ボタンがあり、採用担当者がメッセージを送信したり、仕事の問い合わせをしたりすることができます。メンバーは、個人情報を公開することなく、カスタム リスト ページ内で受信したメッセージを確認できます。

デモ

プロジェクトリンク: https://fredoist.wixstudio.io/latio-team

ホームページ:
Latio Team: A community for tech hackers building togheter

人材プール:
Latio Team: A community for tech hackers building togheter

求人掲示板と投稿
Latio Team: A community for tech hackers building togheter
Latio Team: A community for tech hackers building togheter

ハッカソンのリスト:
Latio Team: A community for tech hackers building togheter

接続:
Latio Team: A community for tech hackers building togheter

メンバープロフィール:
Latio Team: A community for tech hackers building togheter

お仕事お問い合わせフォームとリスト:
Latio Team: A community for tech hackers building togheter
Latio Team: A community for tech hackers building togheter

開発の道のり

JavaScript をすでに知っている場合、Wix の Studio と Velo API を使用した構築は非常に簡単でした。

Velo API のドキュメントはすべて明確で非常に完全です。また、Wix Studio 内のエディターには、非常に使いやすい優れたオートコンプリート機能がいくつかあります。エディターの構築とテストを開始すると、エディターがどのように機能するかを理解し、新しい API をすぐに実装できるようになります。

追加のポイントとして、Wix のテンプレートを使用すると、素晴らしい Web サイトを非常に迅速に構築できます。デザインは、追加する要素の新しいアプリごとに適応します。これは、他に何も触れる必要がないため、非常に優れています。

これは、いくつかの機能のコード ブロックであり、それらを複製できます。

求人情報

import { Permissions, webMethod } from "wix-web-module";
import { getJSON } from "wix-fetch";

const formatPrice = (p) =>
    new Intl.NumberFormat('en-US', {
        notation: 'compact',
        maximumFractionDigits: p < 1 ? 3 : 1,
    }).format(Number(p));

// GET call using getJSON
export const getJobs = webMethod(Permissions.Anyone, async () => {
    const response = await getJSON(
        "https://remoteok.com/api",
    );
    const jobs = response.slice(1).map(job => {
        job._id = job.id;
        job.salary_range = `$ ${formatPrice(job.salary_min)}-${formatPrice(job.salary_max)}`
        job.company_logo = job.company_logo ? `https://remoteok.com/cdn-cgi/image/format=auto,fit=contain,width=100,height=100,quality=50/${job.company_logo}` : null;
        job.logo = job.logo ? `https://remoteok.com/cdn-cgi/image/format=auto,fit=contain,width=100,height=100,quality=50/${job.logo}` : null;
        job.image = job.company_logo ?? job.logo ?? `https://ui-avatars.com/api/?name=${job.company}`
        return job;
    })
    return jobs;
});

求人ページ

import { ok, notFound, WixRouterSitemapEntry } from "wix-router";
import { getJobs } from "backend/fetch-jobs.web"

export async function job_Router(request) {

    // Get item name from URL request
    const slug = request.path[0];

    // Get the item data by name
    const jobs = await getJobs();
    const data = jobs.filter(job => job.slug === slug)

    if (data.length) {
        const job = data[0];

        // Define SEO tags 
        const seoData = {
            title: job.position,
            description: "This is a description of " + job.position + " page",
            noIndex: false,
            metaTags: [{
                "property": "og:title",
                "content": job.position
            }, ]
        };

        // Render item page 
        return ok("job-page", job, seoData);
    }

    // Return 404 if item is not found 
    return notFound();
}

export async function job_SiteMap(sitemapRequest) {
    const jobs = await getJobs()

    // Convert the data to site map entries
    const siteMapEntries = jobs.map((job) => {
        const data = job;
        const entry = new WixRouterSitemapEntry(job.slug);
        entry.pageName = "job-page"; // The name of the page in the Wix editor to render
        entry.url = "/job/" + job.slug; // Relative URL of the page
        entry.title = data.position; // For better SEO - Help Google
        return entry;
    });

    // Return the site map entries
    return siteMapEntries;
}

メンバーへのお問い合わせの送信

import { Permissions, webMethod } from "wix-web-module";
import wixData from "wix-data";

export const sendInquiry = webMethod(
    Permissions.Anyone,
    async (username, email, details, budget) => {
        const results = await wixData.query("Members/PrivateMembersData").eq('slug', username).find()
        const member = results.items.length > 0 ? results.items[0] : null;
        if(member) {
          const memberId = member._id;
          const result = await wixData.save("WorkInquiries", {
            recipientId: memberId,
            contactEmail: email,
            details,
            budget
          })
          if(result) {
            return true
          }
        }
        return false;
    }
);

メンバーの問い合わせを取得しています

import { Permissions, webMethod } from "wix-web-module";
import { query } from "wix-data";
import { currentMember } from "wix-members-backend"

export const getInquiries = webMethod(
  Permissions.SiteMember, 
  async () => { 
    const member = await currentMember.getMember();
    const data = await query("WorkInquiries").eq('recipientId', member._id).find();

    return data.items;
  }
);

Velo API

  1. wix-data: カスタム コレクション データとパブリック/プライベート機能のメンバー データの保存、取得、レンダリングに使用されます。
  2. wix-fetch: 求人投稿は RemoteOK の API によって提供され、Wix の取得メソッドを使用して取得され、求人はリピーター ブロックにレンダリングされます。
  3. wix-router: 求人投稿も、Wix のルーターが使用される独自のページにレンダリングされます。
  4. wix-members-backend: お問い合わせフォームをカスタム コレクションにリンクするために使用されます。データが送信されると、この API を使用してプロフィール スラッグと照合することで memberId が取得され、フォーム データとともにコレクションに渡されます。
  5. wix-location-frontend および wix-window-frontend: これらは、パスやメンバー スラッグなどの URL データを取得するために単に使用されます。

Wix アプリ

  1. Wix メンバーエリア: ユーザープロフィールと認証に使用されます。
  2. Wix グループ: 接続機能に使用されます。
  3. Wix FAQ: ホームページに FAQ を含めます。
  4. CMS: ページ内のデータを表示するためにいくつかの CMS 接続を使用しました。

以上がLatio Team: 一緒に構築するテクノロジーハッカーのコミュニティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。