Cara memakai panduan
Template menerima data profil yang diizinkan tampil. Variabel utama: nama, profil, pengalaman, pendidikan, keahlian, proyek, sertifikasi, penghargaan, organisasi, bahasa, publikasi, testimoni, preferensi_kerja, dan bagian. Daftar yang belum berisi data tersedia sebagai daftar kosong. Gunakan if sebelum menampilkan bagian opsional.
<h1>{{ profil.nama }}</h1>
Identitas dan kontak
profil.nama adalah nama lengkap; profil.profesi adalah headline; profil.lokasi adalah lokasi; profil.ringkasan adalah ringkasan diri; profil.email dan profil.telepon mengikuti izin kontak; profil.foto berisi alamat foto yang sudah diizinkan atau teks kosong. Variabel nama di tingkat atas adalah alias profil.nama.
<h1>{{ profil.nama }}</h1><p>{{ profil.profesi }}</p>
Banner profil
profil.banner berisi alamat banner yang diunggah pemilik profil, atau teks kosong jika belum ada. Gunakan if agar elemen img hanya dibuat saat banner tersedia. Letakkan elemen ini di posisi mana pun pada HTML dan atur ukuran serta susunannya pada CSS, misalnya .profile-banner { width: 100%; height: 220px; object-fit: cover; }. Tidak ada banner yang dipaksakan di luar template. Foto profil menggunakan profil.foto secara terpisah; template boleh memakai banner, foto, keduanya, atau tidak memakai keduanya.
{% if profil.banner %}<img class="profile-banner" src="{{ profil.banner }}" alt="Banner profil">{% endif %}
Foto profil
profil.foto berisi alamat foto profil jika foto diizinkan tampil dan tersedia. Selalu periksa nilainya sebelum membuat elemen img. Foto tidak ditampilkan otomatis pada tema buatan sendiri.
{% if profil.foto %}<img src="{{ profil.foto }}" alt="Foto profil">{% endif %}
Pengalaman
pengalaman adalah daftar entri. Gunakan item.judul, item.keterangan, item.periode, item.rincian, item.tautan, dan item.bukti untuk tampilan umum. Field khusus: item.perusahaan, item.posisi, item.tipe_pekerjaan, item.lokasi, item.tanggal_mulai, item.tanggal_selesai, item.masih_aktif, item.deskripsi, dan item.pencapaian.
{% for item in pengalaman %}<article><h2>{{ item.posisi }}</h2><p>{{ item.perusahaan }} · {{ item.periode }}</p><p>{{ item.pencapaian }}</p></article>{% endfor %}
Pendidikan
pendidikan adalah daftar entri. Field khusus: item.institusi, item.program, item.jurusan, item.tanggal_mulai, item.tanggal_selesai, item.tahun_mulai, item.tahun_selesai, dan item.deskripsi. Field umum item.judul, item.keterangan, item.periode, item.rincian, item.tautan, dan item.bukti juga tersedia.
{% for item in pendidikan %}<article><h2>{{ item.institusi }}</h2><p>{{ item.program }} · {{ item.periode }}</p></article>{% endfor %}
Keahlian
keahlian adalah daftar entri. Gunakan item.nama, item.kategori, item.jenis_keahlian, dan item.level. item.judul dan item.keterangan dapat dipakai untuk tampilan ringkas; item.jenis_keahlian dan item.level adalah nilai data, sedangkan item.keterangan merangkum label yang tersedia.
{% for item in keahlian %}<span>{{ item.nama }}</span>{% endfor %}
Proyek dan portofolio
proyek adalah daftar entri. Field khusus: item.peran, item.ringkasan, item.kontribusi, item.teknologi, item.hasil, item.url_proyek, item.url_repositori, dan item.url_demo. Tautan yang diizinkan tersedia melalui item.tautan; lampiran publik melalui item.bukti.
{% for item in proyek %}<article><h2>{{ item.judul }}</h2><p>{{ item.ringkasan }}</p>{% for link in item.tautan %}<a href="{{ link.url }}">{{ link.judul }}</a>{% endfor %}</article>{% endfor %}
Sertifikasi dan lisensi
sertifikasi adalah daftar entri. Field khusus: item.jenis_kredensial, item.penerbit, item.credential_id, item.credential_url, item.tanggal_terbit, item.berlaku_sampai, dan item.deskripsi. Bukti dan tautan hanya memuat yang boleh tampil.
{% for item in sertifikasi %}<article><h2>{{ item.judul }}</h2><p>{{ item.penerbit }}</p></article>{% endfor %}
Prestasi dan penghargaan
penghargaan adalah daftar entri. Field khusus: item.penerbit, item.tahun, item.tanggal, item.deskripsi, dan item.url_referensi. Gunakan item.periode untuk tanggal atau tahun ringkas, serta item.bukti atau item.tautan untuk pendukung yang diizinkan.
{% for item in penghargaan %}<article><h2>{{ item.judul }}</h2><p>{{ item.periode }}</p></article>{% endfor %}
Organisasi dan volunteer
organisasi adalah daftar aktivitas organisasi atau volunteer. Nama organisasi tersedia sebagai item.perusahaan; posisi sebagai item.posisi. Field lain: item.jenis_aktivitas, item.tanggal_mulai, item.tanggal_selesai, item.masih_aktif, item.deskripsi, dan item.pencapaian.
{% for item in organisasi %}<article><h2>{{ item.posisi }}</h2><p>{{ item.perusahaan }}</p></article>{% endfor %}
Bahasa
bahasa adalah daftar entri. Gunakan item.nama untuk nama bahasa dan item.tingkat untuk tingkat yang dinyatakan pemilik profil. item.judul dan item.keterangan tersedia untuk tampilan umum. Tingkat ini bukan hasil tes OpenWork.
{% for item in bahasa %}<p>{{ item.nama }} · {{ item.tingkat }}</p>{% endfor %}
Publikasi dan karya
publikasi adalah daftar entri. Field khusus: item.jenis, item.penerbit, item.tanggal_publikasi, item.deskripsi, dan item.url. Gunakan item.tautan serta item.bukti untuk tautan dan lampiran yang diizinkan.
{% for item in publikasi %}<article><h2>{{ item.judul }}</h2><p>{{ item.penerbit }}</p></article>{% endfor %}
Testimoni dan konfirmasi
testimoni adalah daftar respons yang boleh tampil. Gunakan item.nama, item.posisi, item.perusahaan, item.hubungan, item.isi, item.judul, item.keterangan, dan item.rincian. Identitas pemberi respons tidak diperiksa otomatis oleh OpenWork; tampilkan sesuai konteksnya.
{% for item in testimoni %}<blockquote><p>{{ item.isi }}</p><p>{{ item.nama }} · {{ item.perusahaan }}</p></blockquote>{% endfor %}
Preferensi kerja
preferensi_kerja adalah objek berisi status, tipe_pekerjaan, sistem_kerja, posisi, dan lokasi. tipe_pekerjaan serta sistem_kerja adalah daftar nilai data; gunakan for untuk menampilkannya. Objek dapat kosong jika pemilik tidak mengisi atau tidak mengizinkan bagian ini tampil.
{% if preferensi_kerja is not empty %}<p>{{ preferensi_kerja.status }}</p>{% endif %}
Urutan bagian, tautan, dan bukti
bagian adalah daftar bagian yang sudah diurutkan dan boleh tampil. Setiap grup memiliki key, label, catatan, dan entri. Setiap entri daftar karier memiliki judul, keterangan, periode, rincian, tautan, dan bukti. rincian adalah daftar teks. tautan dan bukti berisi judul serta url; bukti yang diizinkan juga masuk ke tautan. Periksa daftar sebelum melakukan for.
{% for grup in bagian %}<section><h2>{{ grup.label }}</h2>{% for item in grup.entri %}<h3>{{ item.judul }}</h3>{% endfor %}</section>{% endfor %}
Sintaks Twig yang tersedia
Gunakan {{ variabel }} untuk mencetak nilai, {% if kondisi %} dan {% for item in daftar %} untuk percabangan dan pengulangan. Operator sederhana seperti and, or, not, perbandingan, serta tes defined dan empty tersedia. Filter yang diizinkan: escape, default, upper, lower, dan length. Output HTML di-escape otomatis. Pemanggilan metode, include, fungsi bebas, dan raw tidak tersedia.
{% if pengalaman is not empty %}{% for item in pengalaman %}<p>{{ item.judul|default("Tanpa judul") }}</p>{% endfor %}{% endif %}
HTML yang diizinkan
Gunakan elemen isi: div, span, p, h1 sampai h4, a, img, ul, ol, li, strong, em, b, i, br, hr, blockquote, section, article, header, main, aside, dan small. Atribut class, id, href, title, src, alt, width, serta height hanya tersedia sesuai jenis elemennya. Tautan menerima HTTP/HTTPS atau tautan bukti yang disediakan aplikasi; gambar hanya menerima profil.foto atau profil.banner yang tersedia dan diizinkan. HTML hasil render tetap disaring sebelum tampil.
<main><h1>{{ profil.nama }}</h1><p>{{ profil.ringkasan }}</p></main>
CSS yang diizinkan
Tulis CSS di tab CSS. Aturan selector biasa dan @media didukung; media query maksimal dua tingkat. Properti yang tersedia mencakup warna dan latar, ukuran dan jarak, border, tipografi, flex, grid, posisi, overflow, serta transisi sederhana. URL, @import, @font-face, image-set, expression, dan escape CSS dilarang. Batasi CSS hingga 32 KB dan 600 deklarasi.
Batasan dan privasi
Source HTML/Twig dan CSS masing-masing maksimal 32 KB. Template dibatasi jumlah simpul, kedalaman for, langkah render, dan ukuran output. JavaScript, PHP, form, iframe, CDN, font eksternal, dan aset arbitrer tidak tersedia. Variabel profil mengikuti Tampilkan/Sembunyikan dan izin publikasi; teks pribadi yang diketik langsung ke source tetap terlihat. Foto mengikuti izin berbagi foto; banner tersedia bila diunggah dan profil dapat diakses; bukti mengikuti izin bagian asal dan profil.