Құжаттама/Құрылғыларды баптау

Әкімшіге

Үлгі тілі — Chunk

PalmOrder баспа пішімдеріндегі өрістер, сүзгілер, шарттар және циклдер.

PalmOrder баспа пішімдері Chunk Templates үлгі тілін қолданады. Chunk деректерді қояды, мәндерді пішімдейді, шарттарды тексереді және құжат жолдарын қайталайды. Ол PDF жасауға арналған HTML үлгілерінде де, принтерге арналған .prn үлгілерінде де жұмыс істейді. PDF пішімінде HTML мен CSS құжаттың көрінісін, ал Chunk көрсетілетін деректерді анықтайды.

Үлгіні дайын PDF мысалынан бастап жасауға болады. Файлдарды құрылғыға жіберу тәртібі Басып шығаруды баптау бетінде берілген.

Негізгі синтаксис

ЖазылуыМақсаты
{$doc.number}Өріс мәнін қою.
{$doc.customer_name|html}Арнайы таңбаларды HTML мәтініне сай түрлендіріп қою.
{$row.price|decimal}Санды ондық бөлгіштен кейін екі таңбамен көрсету.
{% if (…) %}…{% endif %}Үлгінің бөлігін шарт орындалғанда көрсету.
{% loop in $table as $row %}…{% endloop %}Үлгінің бөлігін құжаттың әр жолы үшін қайталау.
{!-- Түсініктеме --}Нәтижеде көрінбейтін түсініктеме қосу.

Тегтерден тыс мәтін мен HTML сақталады. Өріс пен пәрмен атауларында бас және кіші әріптер ажыратылады. Мысалы, doc.number мен doc.Number — екі түрлі атау.

Өрістер мен деректер топтары

Нүкте деректер тобын өріс атауынан ажыратады.

<h1>№ {$doc.number|html} тапсырыс</h1>
<p>Күні: {$doc.date_localized|html}</p>
<p>Клиент: {$doc.customer_name|html}</p>
Тапсырыс деректерінің тобыМазмұны
docҚұжаттың бас бөлігіндегі өрістер. Мысалы, number, customer_name, sum және discount. date_localized — тіл мен аймаққа сай пішімделген күн.
doc.customerКлиент анықтамалығының өрістері. Мысалы, doc.customer.code.
weКомпания деректемелері. company, address, registration, billing және comment.
tableЦиклде оқылатын құжат жолдары.
rowas $row деп белгіленген циклдің ағымдағы жолы.
row.productАғымдағы жолдағы тауардың анықтамалық өрістері.

Өріс атауларын өз деректер схемаларыңыздан алыңыз. Мысалы, {$doc.customer.address|html} қолжетімді болуы үшін анықтамалықта address өрісі және құжатқа сәйкес клиент жазбасы болуы керек. we тобындағы деректемелерді Settings → Print → Business details бөлімінде толтырыңыз.

Жоқ және бос мәндер

Өріс жоқ болса, нәтижеде {$doc.some_field} сияқты тег сол күйінде қалуы мүмкін. Қос нүктеден кейін әдепкі мәтінді жазыңыз немесе тегті жасыру үшін қос нүктеден кейін ештеңе жазбаңыз.

<p>Ескертпе: {$doc.info|html:Көрсетілмеген}</p>
<p>{$doc.info|html:}</p>

onempty өріс жоқ кезде де, бос жол болған кезде де алмастыру мәтінін көрсетеді.

<p>Ескертпе: {$doc.info|onempty(Көрсетілмеген)|html}</p>

Абзацты атауымен бірге жасыру үшін шарт қолданыңыз.

Сүзгілер және пішімдеу

Сүзгінің алдына тік сызық (|) қойылады. Сүзгілер солдан оңға қарай орындалады. {$doc.info|onempty(Ескертпе жоқ)|html} алдымен әдепкі мәтінді қояды, содан кейін оны HTML-ге дайындайды.

СүзгіМысалНәтиже
html{$row.name|html}&, <, > және тырнақша сияқты таңбалар HTML-де мәтін ретінде көрсетіледі.
decimal{$row.price|decimal}Ондық бөлгіштен кейін екі таңба. Мысалы, 42,50.
number{$row.count|number}Соңындағы артық нөлдерсіз, ондық бөлгіштен кейін алты таңбаға дейін. Мысалы, 2,5.
onempty(мәтін){$doc.info|onempty(Көрсетілмеген)|html}Жоқ немесе бос мәннің орнына мәтін қояды.
trim{$doc.customer_name|trim|html}Мәтіннің басы мен соңындағы бос орындарды жояды.
uc{$we.company|uc|html}Мәтінді бас әріптерге түрлендіреді.
lc{$doc.customer.code|lc|html}Мәтінді кіші әріптерге түрлендіреді.

decimal және number — PalmOrder сүзгілері. Сандағы бөлгіштер құрылғының тіл және аймақ баптауларына тәуелді. HTML пішіміндегі мәтіндік өрістерге html сүзгісін қосыңыз. Мәтіндік .prn үлгісінде бұл сүзгі қажет емес.

Сандық өрісте {$row.count_display} сияқты _display тегі де болуы мүмкін. Оның дәлдігі құрылғыдағы баған баптауларынан алынады.

Мәтін мен сандарды туралау

HTML және CSS арқылы PDF пішімін туралау

text-align стиліне сол жақ үшін left, орта үшін center, оң жақ үшін right мәнін қойыңыз. Мысалда тақырып ортаға, тауар атауы солға, саны мен сомасы оңға тураланады.

<h1 style="text-align: center;">№ {$doc.number|html} тапсырыс</h1>
<table style="width: 100%;">
  <tbody>
    {% loop in $table as $row %}
    <tr>
      <td style="text-align: left;">{$row.name|html}</td>
      <td style="text-align: right;">{$row.count|number}</td>
      <td style="text-align: right;">{$row.sum|decimal}</td>
    </tr>
    {% onEmpty %}
    <tr>
      <td colspan="3">Тапсырыста тауарлар жоқ</td>
    </tr>
    {% endloop %}
  </tbody>
</table>

Бірнеше ұяшыққа ортақ стильдерді <style> ішіндегі кластарға шығарыңыз. Оның мысалы дайын HTML үлгісінде бар.

sprintf арқылы мәтіндік пішімді туралау

Chunk тіліндегі sprintf сүзгісі .prn файлдарында бағандарды туралау үшін бос орын қосады.

ПішімМысалНәтиже
%20s{$row.name|sprintf(%20s)}Ені кемінде 20 таңба болатын өрісте мәтін оңға тураланады.
%-20s{$row.name|sprintf(%-20s)}Ені кемінде 20 таңба болатын өрісте мәтін солға тураланады.
%-20.20s{$row.name|sprintf(%-20.20s)}Мәтін солға тураланып, 20 таңбамен шектеледі. Қысқа мәтін бос орынмен толықтырылады.
%10s{$row.sum|decimal|sprintf(%10s)}Екі ондық таңбасы бар сома ені кемінде 10 таңба болатын өрісте оңға тураланады.

%20s ішіндегі 20 ең аз енді, s мәтіндік мәнді білдіреді. Минус таңбасы мәнді солға туралайды. .20 бөлігі мәтіннің ұзындығын шектейді. Шек қойылмаса, ұзын мән келесі бағандарды ығыстыруы мүмкін.

{% loop in $table as $row %}
{$row.name|sprintf(%-20.20s)} {$row.count|number|sprintf(%8s)} {$row.sum|decimal|sprintf(%10s)}
{% onEmpty %}
Тапсырыста тауарлар жоқ
{% endloop %}

«Су» тауарының саны 2,5, сомасы 125,00 болса, нәтиже төмендегідей көрінеді.

Су                        2,5     125,00

Алдымен санды пішімдеп, содан кейін туралаңыз. Сонда ен көрсетілетін мән бойынша есептеледі. Таңбаларының ені бірдей қаріпті пайдаланыңыз. Жол ұзындығы принтердің таңдалған режимде бір жолға сыйғызатын таңба санынан аспауы керек.

Шарттар

Жеңілдігі бар тапсырыста doc.has_discount мәні 1 болады.

{% if ($doc.has_discount == 1) %}
<p>Жеңілдік: {$doc.discount|decimal} UAH</p>
{% else %}
<p>Жеңілдік жоқ</p>
{% endif %}

else тармағы міндетті емес. Кей үлгілерде шартты жабу үшін {% /if %} қолданылады.

ОператорМағынасы
==Мәндер тең.
!=Мәндер әртүрлі.
&&Екі шарт та орындалады.
||Кемінде бір шарт орындалады.
!$fieldӨріс мәні жоқ.

Салыстырылатын мәтінді қос тырнақшаға алыңыз. Шарттарды топтау үшін жақша қолданыңыз. Теңдік мәндердің мәтіндік жазылуын салыстырады. Сондықтан 1 және 1.0 әртүрлі. Шарттарда >, <, >= және <= сияқты сандық салыстыру операторлары қолданылмайды.

Бірнеше тармақ және кірістірілген шарттар

Бірнеше нұсқаны тексеру үшін elseIf қолданыңыз. Бірінші сәйкес тармақ орындалады.

{% if ($we.company && $we.company != "") %}
<p>Жеткізуші: {$we.company|html}</p>
{% elseIf ($we.registration && $we.registration != "") %}
<p>Жеткізушінің тіркеу немесе салық нөмірі: {$we.registration|html}</p>
{% else %}
<p>Жеткізуші деректемелері толтырылмаған</p>
{% endif %}

Әр кірістірілген шартты жеке жабыңыз.

{% if ($we.company && $we.company != "") %}
<p>{$we.company|html}</p>
  {% if ($we.address && $we.address != "") %}
  <p>{$we.address|html}</p>
  {% endif %}
{% endif %}

Бос өрістерді жасыру

{% if ($we.billing && $we.billing != "") %}
<p>Банк деректемелері: {$we.billing|html}</p>
{% endif %}

$we.billing мәннің барын тексереді. $we.billing != "" бос жолды алып тастайды. Қарапайым if ($field) шарты бос жол немесе нөл болғанда да орындалады. Жеңілдік белгісі үшін == 1 салыстыруын қолданыңыз.

Циклдер және құжат жолдары

Цикл table ішіндегі әр жазба үшін өз бөлігін қайталайды. as сөзінен кейінгі атау ағымдағы жазбаны білдіреді. counter=$num,1 жазбаларды 1-ден бастап нөмірлейді. Жазбалар болмаса, onEmpty бөлігі көрсетіледі.

<table>
  <thead>
    <tr>
      <th>№</th>
      <th>Тауар</th>
      <th>Саны</th>
      <th>Сомасы</th>
    </tr>
  </thead>
  <tbody>
    {% loop in $table as $row counter=$num,1 %}
    <tr>
      <td>{$num}</td>
      <td>{$row.name|html}</td>
      <td>{$row.count|number}</td>
      <td>{$row.sum|decimal}</td>
    </tr>
    {% onEmpty %}
    <tr>
      <td colspan="4">Тапсырыста тауарлар жоқ</td>
    </tr>
    {% endloop %}
  </tbody>
</table>

Санауыш міндетті емес. Жазбалар болмағанда көрсетілетін мәтінді onEmpty бөлігіне жазыңыз. Ол болмаса, Chunk кестенің бос екені туралы қате хабарын шығарады. Цикл ішінде құжаттың бас бөлігіндегі өрістерді және шарттарды қолдануға болады. Жеңілдік бағанын жасыру үшін оның тақырыбы мен жол ұяшығына бірдей шарт қойыңыз.

Бірінші және соңғы жол

first_last=true параметрі бірінші жолда $first, соңғы жолда $last белгісін береді. Бір ғана жол болса, екі белгі де бар. Олар тауарлардың бүкіл тізіміне қатысты.

{% loop in $table as $row first_last=true %}
  {% if ($first) %}
  <p>Тауарлар тізімі:</p>
  {% endif %}
<p>{$row.name|html}</p>
  {% if ($last) %}
  <p>Тізімнің соңы</p>
  {% endif %}
{% onEmpty %}
<p>Тапсырыста тауарлар жоқ</p>
{% endloop %}

Жазбалар арасындағы бөлгіш

divider жазбалардың арасына бөлгіш қояды. Соңғы жазбадан кейін бөлгіш шықпайды.

<p>
{% loop in $table as $row %}
{$row.name|html}
{% divider %}, {% enddivider %}
{% onEmpty %}—
{% endloop %}
</p>

Үлгі бөліктерін қайта пайдалану

Үлгі бөлігін {#name} және {#} арасына жазып, include арқылы кірістіріңіз. Анықтаманың өзі нәтижеде көрінбейді. Кірістірілген бөлік сол орында қолжетімді өрістерді пайдалана алады.

{#company_details}
<p>{$we.company|html}</p>
{% if ($we.address && $we.address != "") %}
<p>{$we.address|html}</p>
{% endif %}
{#}

{% include #company_details %}
<h1>№ {$doc.number|html} тапсырыс</h1>
{% include #company_details %}

Ортақ бөлікті бірнеше пішімде қолдану үшін common.chtml сияқты бөлек файлға сақтаңыз.

{#signature}
<p>Жіберген: ____________________</p>
<p>Қабылдаған: ____________________</p>
{#}

Негізгі HTML үлгісінде оны төмендегі пәрменмен кірістіріңіз.

{% include common#signature %}

common.chtml файлын негізгі үлгімен бірдей алмасу профилі арқылы құрылғыдағы әдепкі орынға жүктеңіз. include ішінде common атауын кеңейтімсіз жазыңыз. PalmOrder үлгілерді жүктегенде .chtml кеңейтімін өзі қосады. pdf_forms.xml файлының <file> элементінде негізгі HTML үлгісінің атауы қалады.

Есептеулер

Қарапайым есептеулер үшін PalmOrder ұсынған po_calc сүзгісін қолданыңыз. Өрнек ішіндегі өріс атаулары $ таңбасынсыз жазылады. +, -, *, / амалдары мен жақшалар қолданылады. Нәтижені decimal немесе number сүзгісімен пішімдеуге болады.

<p>Соманың жартысы: {$doc.sum|po_calc(doc.sum/2)|decimal} UAH</p>

Қорытындыларды көрсету үшін doc.sum, doc.discount және жол сомаларын пайдаланыңыз. Бұл мәндерде қосымша есептеген жеңілдіктер мен дөңгелектеу ескерілген.

Түсініктемелер

Chunk түсініктемесі ішіндегі тегтермен бірге алынып тасталады.

{!-- Мұнда компания деректемелері көрсетіледі. --}
<p>{$we.company|html}</p>

Үлгіні тексеру

Өзгертілген үлгіні құрылғыға жүктеп, пішімді қайта жасаңыз. Деректемелері толтырылған және бос, жеңілдігі бар және жоқ, бір және бірнеше тауары бар тапсырыстарды қарап шығыңыз.

БелгісіНені тексеру керек
{$…} тегі қалып қойғанӨріс атауы және деректерде бар-жоғы. Міндетті емес өріске әдепкі мән немесе шарт қосыңыз.
Атауы көрсетілген, мәні босШарт абзацты атауымен бірге қамти ма.
Нөлдік жеңілдік көрінедіШарт doc.has_discount мәнін 1 мәнімен салыстыра ма.
Тауар жолдары қайталанбайдыҰяшықтар цикл ішінде ме және ағымдағы row өрістерін қолдана ма.
& немесе < таңбалары қате көрсетіледіHTML үлгісіндегі html сүзгісі.
Ондық таңбалар саны дұрыс емесdecimal, number немесе тиісті _display тегі.
Үлгі бөлігі табылмадыinclude ішіндегі атау, {#…} анықтамасы және .chtml файлының жүктелуі.

Ағымдағы орында қолжетімді тегтердің атауларын көру үшін HTML үлгісіне уақытша {% tagStack(html) %} пәрменін қосыңыз. Оны цикл ішінде де қолдануға болады. Тексергеннен кейін пәрменді өшіріңіз.

Тілдің қосымша мүмкіндіктері Chunk Templates құжаттамасында берілген. decimal, number және po_calc — PalmOrder қосқан сүзгілер.