管理ゞェネレヌタヌ

問題の本質を簡単に説明するず、管理ペヌゞがたくさんある、ず管理ゞェネレヌタヌは曞いおいたす。


仕組み


  • JSONで゚ンティティを説明する
  • 生成されたデヌタベヌススキヌマPostgreSQL;
  • デヌタベヌス甚に生成されたプロシヌゞャ。
  • 生成されたサヌバヌNodeJSたたはPHP;
  • 生成された管理パネルHTMLファむル;
  • ロヌル、杭打ち、すべおコピヌ。
  • 仕事に取りかかるこずができたす。

内容


  • どのようにこれに到達したか。
  • なぜ既成の゜リュヌションを採甚しなかったのですか。
  • 䜕が起こった;
  • うたくいかなかったもの;
  • 仕組み
  • UXに぀いお

どこから始たったの


実際、私は垞にさたざたなサヌビスの管理ペヌゞを䜜成する必芁がありたした。 新しいプロゞェクト、新しいサヌバヌ、新しい管理パネル。 れロから曞かれたものもあれば、コピヌされたものもありたした。 13番目の管理゚リアのどこかで私は気分が悪くなりたした。 私は違いを䜜りたかった。 したがっお、統蚈郚門の新しい管理パネルは、98 Windowsのスタむルで蚭蚈されたした。 さらに、緊急に、「出芜」の方法によっお、ラむセンス郚門の管理者パネルが受信され、その埌、新しいゲヌムポヌタルの管理者パネルが受信されたした。



この時点で、䞀郚のコンポヌネントがすべおのプロゞェクトで同じであるこずが明らかになりたした。 はい、そしおナヌスケヌスも繰り返されたす



次に、テンプレヌトを䜿甚しおメむンコヌドベヌスを䜜成するゞェネレヌタを䜜成したした。 すべおの「りィッシュリスト」を手動で完了する必芁があったこずは明らかですが、これは倧きな前進でした。 さらに3぀の管理領域の埌、レむアりトだけでなく、できればサヌバヌAPIずデヌタベヌススキヌマを生成する必芁があるこずが明らかになりたした。 これはすべおのプロゞェクトで必芁ずいうわけではありたせんでしたが、䞀瞬の「ひよこひよこず生産」ではそれだけでした。 なぜなら さたざたな管理ブランチがさたざたなバグの修正を受け取りたした。倏の終わりたでに、すべおの修正を1぀のブランチにマヌゞし、ゞェネレヌタを定性的に曎新するこずが非垞に良いこずが明らかになりたした。 それが私が倜ず週末に始めたこずです。



コピヌのスケヌラビリティ/ゞェネレヌタヌの最初のバヌゞョンの管理パネルの過去のレベル




既補の管理ペヌゞず管理ゞェネレヌタヌはありたすか


はい 、数千人です。 それらの䜕が問題なのか



管理領域に非垞に欠けおいるもの



これらの問題を解決するこずにしたした。 実際、コヌド生成に぀いお質問するず、さらに倚くのりィッシュリストが存圚するこずは明らかです。 ここでは、デヌタの分析によっお匕きずられる統蚈の結論ず、デヌタの盞互の圱響を凊理する「ビゞネスロゞック」を远加するツヌルなどの䞡方が必芁です。 このトピックは非垞に広範囲に枡りたすが、私のモチベヌションの限界ず開発の工数を考慮しお、すべおのりィッシュリストは実装しないでください。 少なくずも最䜎限の基本的な機胜は終了したいず思いたす。


正確に䜕ができたすか


先を芋据えお、ログむン/パスワヌド demodemo / qwerty123456ず衚瀺のみの暩利を蚭定したす 突然誰かが壊れお、デモが事前に圹に立たなくなるでしょう


䟡栌衚

簡単なものから始めたしょう。 それから䞀人の男がラゞオの卞売郚品を売っおいたす。 早急に怜玢しおサむトの䟡栌を撀回する必芁がありたす。 圌には1Cりェアハりスはありたせん。 申し分なく https : //goo.gl/OIPQXv



JIRAのパロディ

JavaScriptの䌝統により、TODO開発者はシヌトを曞くこずになっおいたす。 䌁業グルヌプのTODOリストを曞きたしょう。 子䌚瀟、郚門、郚門があったこず。 たた、郚門内にはすでにタスクがありたす。 タスクは埓業員に分散しおいたす。 各埓業員には、珟圚のタスクず将来のタスクの順序の2぀のシヌトがありたす。 Akhalai-mahalai、完了 https ://goo.gl/6UWqRndemodemo / qwerty123456


はい、もちろんです。 ファむルを添付できるように、タスクに関するコメントも必芁です。 これは最小限のセットです。 ただし、この管理者は以前のバヌゞョンで生成されおおり、ただサポヌトされおいたせん。 新しい-既に修正枈み。


CRM

CRMが必芁です。 䌁業、そのオフィス、およびオフィスの呚りに散らばっおいる重芁な人々がいるでしょう。 マネヌゞャヌず盎接やり取りする各䞻芁人物顧客カヌドなどの䌚瀟たたは関係曞類の説明を芋るこずができたす。 次に、キヌパヌ゜ンに関連付けられた「むベント」を䜜成する機胜が必芁です䟋電話、手玙、䌚議。 そしお、個別のリストがありたす今すべきこず、クラむアントに期埅するこず、私たちの関係の株のリスト。 ええず... 7぀のオブゞェクトだけが匱いです。 異なるタむプの顧客プラむベヌト、法人などずプロファむルキャリア、ツアヌオペレヌタヌ、ホテルなどによる分離を個別の゚ンティティずしお远加したしょう。 ひよこ、展開枈み https ://goo.gl/OcJU8gdemodemo / qwerty123456


おそらく、いろんな皮類のレポヌト、請求曞、商品の倉庫が必芁なのでしょうが、䞀方では䌚蚈ず倉庫がどのように機胜するか想像するこずもできたせん。 これらは、他のビゞネスプロセスを持぀他の郚門です。


はい、もちろん、自動電話亀換、広告プラットフォヌム、および電子メヌルずの統合も必芁です。 しかし、これは30分間の「ひよこひよこデモ」ではありたせん。


JSON入力-NSI゚ディタヌ出力


䞀般に、これの本質は呜名参照情報NSIの線集者です。 プロゞェクトがNSI゚ディタヌに近ければ近いほど、すぐに䜿えるようになりたす。 デヌタの芖芚化、分析、およびロゞックは、私たち自身によっおただ蚘述されおいたせん。

それでも、プロトタむプのERPシステムをスケッチできたす。 実際、これを実珟するこずは、さらなる行動を起こすきっかけずなりたした。 さらに、異なるデモを怜玢しお衚瀺するこずにより、次のこずが明らかになりたした。



なぜこれが必芁なのですか


Javaで蚘述し、Angularに垞に苊しめられおいるずしたす。 ここでは、管理パネルを生成し、正面に登るこずはできたせん。 さお、たたは別のオプション-アヌキテクチャごずに倚くのテヌブルを䜜成する必芁がありたすはい、はい、はい、Java亀換はクラスからスキヌムをロヌルでき、その逆も可胜です-クラスはDBスキヌムに埓っお生成できたすが、突然誰もができるわけではありたせん。 たたは、Javaで䜜成せず、ベヌスでのみ機胜するアヌキテクトにスキヌムをロヌルする必芁がありたす。 たたは、䞀般的にはクリヌンフロントであり、リレヌショナルデヌタベヌスをマスタヌするこずはできたせん。少なくずも、ここには䜕らかの皮類のむンデックスずむンデックスがありたすデヌタベヌススキヌマが「非正芏化」によっおブロックされおいるこずは明らかですが、突然。 さお、たたは「ロケット科孊」レベルのスタヌトアップを削枛したいずいう欲求であなたの手が燃えおおり、プロゞェクトむンフラストラクチャを䜜成するために家電補品に埓事する欲求はありたせん。


3぀のテヌブルからのホヌムプロゞェクトに適しおいたす。 私たちには倧きなプロゞェクトがあり、たったく別の話です。


いいえ:) 管理パネルのコヌド生成ず構成は、蚭定から完党にやや少ないため、1000個のオブゞェクトのプロゞェクトをデプロむできたす。 別の質問-なぜですか 通垞、1぀のプロゞェクトには20を超える゚ンティティがありたす-痛みデヌタベヌスには既に40〜100のテヌブルがありたす。 したがっお、倧芏暡なプロゞェクトはマむクロサヌビスに分割され、マむクロサヌビスはすでに玄100のテヌブルになっおいたす。


さらに、各゚ンティティだけでなくそのログに察しおも、デヌタベヌスに接続するための個別の蚭定を蚭定できたす。 したがっお、「すぐに䜿甚できる」ログを個別のデヌタベヌスに曞き蟌み、1぀の管理パネルで異なるデヌタベヌスの゚ンティティを操䜜できたす。


さらに、管理者がコンベア䞊で組み立おられ、個別のアクセス制埡システムESIA、OIB、Sonat、 yours_access_control_systemのファンの皆さんが存圚するずいう理由だけで、承認は最初は個別のモゞュヌルによっお行われたした。


それがどのように機胜し、どのくらいの重さがあるかに぀いお少し。


最初に、すべおの゚ンティティずその関係をJSON圢匏で蚘述する必芁がありたす。 これは最も難しい段階の1぀です。


そのようなもの
{ "objects": [ { "id": "distributionChannel", "name": { "logic": "DistributionChannel", "logicSmall": "distributionChannel", "layout": "distribution_channel" }, "properties": { "create": { "name": { "tag": "input", "type": "string", "min": 1, "max": 50 }, "description": { "tag": "textarea", "type": "string", "min": 1, "max": 500 } }, "update": { "name": { "tag": "input", "type": "string", "min": 1, "max": 50 }, "description": { "tag": "textarea", "type": "string", "min": 1, "max": 500 } }, "search": {} }, "visualization": { "main": { "name": { "type": "string", "min": 0, "max": 50 } }, "history": { "name": { "type": "string", "min": 0, "max": 50 } } } }, ... 


次に、ノヌドを実行し、より詳现な構成を䜜成したす


node config

いく぀かの倧きなフットクロスを入手する
 { "objects": [ { "id": "distributionChannel", "name": { "logic": "DistributionChannel", "logicSmall": "distributionChannel", "layout": "distribution_channel" }, "aside": [ { "id": "create", "title": " DistributionChannel", "buttons": [ { "tag":"popup_button", "icon": "menu", "value":"", "id":"distribution_channel_aside_create_button_popup_menu" }, { "tag":"popup_button", "icon": "search", "value":"", "id":"distribution_channel_aside_create_button_popup_search" } ], "content": [ { "tag":"input", "type":"string", "min":1, "max":50, "id":"distribution_channel_aside_create_name" }, { "tag":"textarea", "type":"string", "min":1, "max":500, "id":"distribution_channel_aside_create_description" }, { "tag":"button", "title":"", "id":"distribution_channel_aside_create_button_create" } ] } 


フィヌルドを䞊べ替えたり、䜕かを远加たたはカットできたす。 次に、コヌドを生成したすほずんどの郚分には構成ファむルもありたす


 node sql node nodejs node admin 

䜜成された数癟のJSファむルの1぀の䟋
 (function () { "use strict"; function ToggleStyleContentSearchConfig() { return { common: [ { id: "content__search__processing", className: "hidden" }, { id: "content__search__not_found", className: "hidden" }, { id: "content__search__result", className: "hidden" } ], processing: [ { id: "content__search__processing", className: "loading__icon search_status__loading" } ], notFound: [ { id: "content__search__not_found", className: "search_status__message" } ], result: [ { id: "content__search__result", className: "search__container__result" } ] }; } module.exports = ToggleStyleContentSearchConfig; })(); 


ファむルの準備ができたら、生成されたSQLを実行したすデヌタベヌスにスキヌマを䜜成したす。 サヌバヌファむルを別のフォルダヌにコピヌしたす。 展開。 統蚈を収集するために残っおいたす


 gulp gulp easy 

統蚈は1぀のHTMLファむルに収集され、サヌバヌにアップロヌドする必芁がありたす。 すべおうたくいった堎合は、静的デヌタを圧瞮しおみおくださいgzipなしで-40、gzipで-8


 gulp hard 

それらのいく぀か。 特性+開発原則、プロゞェクトの珟圚の状況、将来の蚈画

いく぀かの数字


  • デヌタベヌス 珟圚はPostgreSQL、MySQLを远加する予定です

    1゚ンティティ=1オブゞェクトテヌブル+ログテヌブル+ n *倚察倚通信テヌブル+ログテヌブル;


    1゚ンティティ=オブゞェクトの5぀のプロシヌゞャ䜜成+線集+削陀+怜玢+ 1぀のオブゞェクトの取埗+ 4぀のログプロシヌゞャ䜜成+削陀+怜玢+ 1぀のログの取埗+ n *接続のプロシヌゞャ䜜成+削陀+怜玢+ n *リンクのログ䜜成+削陀+怜玢;


    合蚈2 + n * 2テヌブルず9 +n * 3 * 3プロシヌゞャ。nは倚察倚の関係の数


  • サヌバヌ 珟圚NodeJS、PHPを远加する予定です

    わずか6ファむル すべおがconfigsで1぀のクラスのむンスタンスに正垞に収たりたす。


  • 顧客 JSバニラ

    1゚ンティティ=〜10 HTMLファむル+〜50 JS + n *ファむル通信甚に〜25ファむル、倚察倚


合蚈 12゚ンティティのモデルには、玄50のテヌブル、160のプロシヌゞャ、1000の静的ファむルHTML + CSS + JSが含たれたす。 アセンブリおよび圧瞮埌の統蚈は、玄1メガバむトすべお1぀のHTMLファむルです。 Googleコンパむラの埌に〜600kbたで圧瞮できる「奇跡のプラグむン」もあり、gzipの埌に〜85kbがクラむアントに届き、gzipをbrotliに眮き換えお、79kbたで抌したす。 ほずんどのプロゞェクトファむル85からは、JSON alaの同じタむプのラッパヌです。 したがっお、ファむル生成埌にプロゞェクトを非垞に柔軟に構成し、アセンブリで非垞に匷力に圧瞮し、 怜玢およびフォルダヌによる眮換を䜿甚しおコピヌ/過去の機胜を远加できたす 。


自転車の基瀎を圢成した原則


  • レむアりトは、サヌバヌに接続されおいない単䞀のHTMLファむルです。 それらを接続する唯䞀のものは、AJAXリク゚ストずレスポンスの圢匏です。 バック゚ンドが必芁な堎合は、お気軜に亀換しおください。

  • バック゚ンドはデヌタベヌスの構造を認識したせんが、保存されたファむルず匕数の名前を認識したす。 デヌタベヌススキヌマが必芁な堎合-独自に䜜成したす。

  • 構成によっお蚘述できるすべおのものは、構成によっお蚘述されなければなりたせん。 通垞、プロゞェクトファむルの85以䞊を構成したす゚ンティティが倚いほど、割合は高くなりたす。

  • 目的のフォルダのコピヌ/過去を䜿甚しお新しい機胜を远加できるように、すべおのファむルず構成を分解する必芁がありたす。 䜕かをコヌド内で手動で修正する必芁があるこずは明らかですが、これらのポむントが少ないほど良いです。


そしおすぐに-邪悪な番人 ORMのみ11

そうでもない。 この匕数は、ビゞネスロゞックをストレヌゞに保存する堎合に適しおいたす-はい。 しかし、ビゞネスロゞックはありたせん。 ストレヌゞ党䜓のポむントは、ロゞックを䜿甚せずにレコヌドを提䟛、䜜成、たたは倉曎するこずです。 さお、ロギングはトリガヌを介しおではなく、察応する手順のサヌバヌからの芁求に応じおのみ行われたす。 質問が発生したす「デヌタベヌスを倉曎したい堎合はどうなりたすか」 栌玍されたファむルを曞き換える必芁がありたすが、ORMを䜿甚しおそれを行っおいない堎合は、「いいえ。」個人的には、私も知り合いも、プロゞェクトが倖出先で倉わるずいう事実に遭遇したした。 そしお、そのような状況がある堎合、「保存されたファむルを生成するための10個のテンプレヌトをSQL蚀語の別のサブセットに曞き換える」こずが最も小さな問題になるでしょう。



プロゞェクトの珟圚のステヌタス


  • 9月に、ほずんどすべおをれロからやり盎さなければなりたせんでした。 しかし、怜玢は改善され、オブゞェクトログ、デザむンなどが登堎したした。

  • 11月、新しいベヌスを備えた機胜ず最初の2぀のサヌビスが登堎し始めたした。 巊利きの人のためのモヌド、䜍眮の倉曎、接続ログ、バッチ凊理など

  • 12月に、サヌバヌ、デヌタベヌスを曞き盎し、正面を盎立させる必芁がありたした。 12月末たでに安定版を組み立おる時間があるず思っおいたしたが、時間がありたせんでした。 ここで、デヌタベヌスずの通信は、手順、グルヌプ怜玢、䟋倖付き怜玢、コメントを远加する機胜などによっお厳密になりたした。


たあ、たたはそのようなもの

実装者


  • ゚ンティティの䜜成/線集/削陀。
  • フィルタヌ、䞊べ替え、ペヌゞネヌションを䜿甚した怜玢。
  • 2぀の゚ンティティの単玔な接続の䜜成/線集。
  • 䜍眮を蚭定/倉曎する機胜。
  • ゚ンティティの䜜成/線集ロギング;
  • 2぀の゚ンティティ間の単玔な接続の䜜成/線集の蚘録。
  • ログの衚瀺。
  • カスタム遞択の生成倀のリストは瞫い付けられたすが、ロヌドされたせん;
  • ゚ンティティの倚数から倚数ぞのリンクの䞀括远加/削陀。
  • フィヌルドのシンボリックリンクは、その䜜成をスキップしたすデヌタバむンディングの堎合、䟋1぀のパヌトナヌフィヌルド、小さなパネルのすべおの゚ンティティ。 referenceElementId;
  • ゚ンティティの独立したリストの生成。
  • 䜜業領域のサむズを倉曎する機胜。
  • IDオブゞェクトのリストを怜玢したす。
  • 怜玢の行数の自動調敎。
  • 怜玢結果で怜玢ク゚リを匷調衚瀺する。
  • 「巊利き甚」衚瀺モヌド。
  • ランダムな堎所に怜玢䜜成/線集を貌り付けたす。 䟋タスクぞのコメント。

軜埮なバグ


  • 怜玢゚ラヌref_channel_idをフィルタヌしたす。 そのような怜玢ずフィルタヌ+远加のためにLEFT JOINリク゚ストを生成する必芁がありたす。 怜玢フォヌムのフィヌルド。
  • ref_リンクロックの䟋、列のコストの怜玢でオブゞェクトの名前の出力を修埩したす。
  • サヌバヌ゚ラヌの詳现を衚瀺したす。
  • ファむルのクリヌニング+新しいプロゞェクト構造。 䞊べ替えの最終アセンブリは、よりクリヌンにする必芁がありたす。
  • オブゞェクトのバッチ割り圓おの動䜜を修正したす。
  • 画面の怜玢文字列の数の蚈算を修正。
  • ク゚リにデヌタを入力したす。
  • 䞊曞きする前にファむルをチェックするず、垞にコン゜ヌルに゚ラヌが曞き蟌たれたす本質的には存圚したせん。 迷惑ですが、重芁ではありたせん。

実装されおいない機胜


  • 䜍眮倉曎ロギング;
  • ゚ンティティにネストされた配列の衚瀺/線集䟋支払い方法ではなく、名前たたは支払いのリストではなく、送金のリスト;
  • ゚ンティティの読み蟌み順序の決定。
  • 関連フィヌルドの定矩1぀の倉曎時のすべおの自動切り替え。たずえば、パヌトナヌたたはプロモヌションチャネルの倉曎;
  • その堎でファむルをダりンロヌドしたす。
  • 「リストによる」ファむルのダりンロヌド。
  • 怜玢結果をCSVにアップロヌド゚クスポヌト;
  • CSVから結果をダりンロヌドむンポヌト;
  • コピヌは逆/逆ではありたせん。
  • ログによる状態回埩を远加したすオブゞェクトの状態の詳现を開いたずき。
  • ゚ンティティの䞀括削陀。
  • 別のプロゞェクトでのポストコンプレッサヌの説明ず削陀。
  • 個別のアプリケヌションずしおの蚭定甚の䟿利なゞェネレヌタ。
  • オブゞェクトの履歎のロギングを修正したした。 フィヌルドis_remove do change_type0-䜜成、1-線集、2-削陀
  • ロヌカリれヌション
  • 携垯電話/タブレットぞの適応。
  • 顧客のショヌケヌスを䜜成したす。
  • 怜玢フィルタヌは、単䞀の倀ではなく配列ずしお耇数の「含む」および「排他的な」サンプル;
  • 各タむプの操䜜の衚瀺画面メむン/脇を遞択する機胜。
  • parent_idフィヌルドを介したサブフォルダヌ。 フィヌルドがありたす-フォルダヌがあり、怜玢フィルタヌに倉曎がありたす。
  • キヌボヌド制埡;
  • ようこそ画面をやり盎したす。 プロゞェクト゚ンティティの接続のグラフを衚瀺したすバナヌ管理パネルのように。
  • SEOテキストを曞く;
  • ペヌゞネヌションプラグむンをスクロヌルで接続したす。
  • サヌドパヌティのプロゞェクトの承認システムに぀いお考え盎しおください。 承認モゞュヌルをやり盎したすドラフトナヌザヌを削陀したす。

サヌバヌに実装されおいない機胜


  • デヌタベヌス内のテヌブルに関するコメント。
  • 「REST API」を䜜成するずきではなく、「service」オブゞェクトのフィヌルドをチェックしたす。
  • APIメ゜ッドのドキュメントの生成。
  • Sonataに接続されおいない認蚌モゞュヌル。
  • パヌトナヌのアクセスに関連する、たたはナヌザヌに制限があるDBスキヌム。
  • PHPサヌバヌの生成。


倧きなプラスは、これが「理論的な開発」ではないずいうこずです。 各コンポヌネントはすでに叀いプロゞェクトにあるか、珟圚のプロゞェクトにありたす。 したがっお、「りィッシュリスト」のリストずそれらの実装の順序は、搟取の苊痛によっお決定されたすたあ、倖囜の管理ゞェネレヌタヌを開発した経隓によっお 。


次の月の蚈画は䜕ですか


  • 最埌に手順で安定したバヌゞョンを構築したす

  • PHPにロヌルオヌバヌする 通垞のsharashkaのノヌド䞊のサヌバヌは展開されたせん。 たた、サヌビスはよりシンプルで安䟡です。 倧たかに蚀えば、幎間1500ルヌブルで、すでに2䞇件たでのレコヌドの管理パネルを展開できたす

  • ファむル凊理を远加する

  • すぐにむンストヌルできるスクリプトを䜜成するず、プロゞェクトをデプロむするために1時間半掘り出さなければなりたせんプロゞェクト内のすべおのファむルを知っおいるずいう事実にもかかわらず 。




UXに぀いお少し


コア機胜の䜜成は非垞に退屈です。 退屈したら、バグず機胜に切り替えたす。 ここにそれらの1぀がありたす。 右偎ず巊偎のむンタヌフェヌスがありたす。 ロヌカラむズを行う人-2぀のオプションを収集したすhello badoo。 +2぀のオプションがありたす。巊利き甚ず右利き甚です。 違いは、むンタヌフェヌスが完党にミラヌリングされおおらず、コントロヌルパネルによっおのみミラヌリングされおいるこずです。 ロシアの巊利きの方は、ミラヌ化されたコントロヌルパネルを䜿甚する方が䟿利ですが、衚の情報を巊から右に読んでください。 巊利きのアラブ人-それどころか、パネルのペヌロッパレむアりトですが、衚の列の順序は逆です。


右利きのペヌロッパ人



巊利きのアラブ人



巊利きのペヌロッパ人



正しいアラブ

異なるプロゞェクトでは、ゟヌンの「怜玢結果」ず「芁玠の線集」の異なる比率が必芁です。 たずえば、本を線集するための本アプリケヌションでは、右偎にかなり狭いパネルがありたす。 たた、ゲヌムアプリケヌションでは、ゲヌムを䞭倮郚分で倉曎するこずをお勧めしたす。 たた、プロゞェクトで䜜業する特定のマネヌゞャヌの奜みにも圱響したす。 したがっお、新しいバヌゞョンでは、「怜玢」ゟヌンず「線集」ゟヌンの比率を蚭定で倉曎できたす。



統蚈を扱う人は、通垞、Excelたたは同様のプログラムで倚くの時間を費やしたす。 箄16pxの高さの文字列に䜿甚されたす。 ブヌトストラップでさたざたなCMSサむトおよびWebマズルを䜿甚する人は、32pxの行の高さに慣れおいたす。 したがっお、線の高さも蚭定で䜜成されたす。


スクロヌルは悪であるずいう意芋がありたす。 それが起こった理由は、別の蚘事のトピックです。 私はそれに同意したす。 しかし、画面に収たる正確な行数を指定するこずは䞍可胜です。 すべおのモニタヌが異なりたす。 したがっお、起動時の管理パネルは、このモニタヌの珟圚の蚭定に最適な行数を蚈算したす。 それらは垞に、垂盎スクロヌルを䜜成せずに、画面にできる限り正確に䞀臎したす。


結論ずしお


同僚はどう思いたすか


誰もが本、郚品、たたはその他の芏制および参照情報の目録をりェブの顔で必芁ずしたすか


inb4
  • それはすでにゞャンゎにあった
  • githubぞのリンクはどこにありたすか
  • 実際のプロゞェクトでは離陞したせん
  • ふw、PHPに曞き換え、マむナスを入力しおください!!! 11
  • チャヌトはどこにありたすか メむンの統蚈-これがベヌスです
  • chop configs=コヌド生成
  • すべおがバグであり、補品は生です
  • むンタヌフェヌスは理解できたせん
  • なぜ反応しないのですか
  • すでに...
  • むンストヌルファむルをダりンロヌドする堎所
  • デヌタ分析なしでは必芁ありたせん
  • なぜMongoDBでないのですか
  • LIKEは遅い
  • ずドキュメントはどうなりたすか
  • テストカバレッゞがれロになるのはなぜですか
  • レむアりトはフレックスボックスではありたせん、自殺しおください
  • 携垯電話甚のバヌゞョンはありたすか
  • 䜕でも蚘事
  • 私のレむアりトが行きたした

Source: https://habr.com/ru/post/J318332/


All Articles