{"id":14974076,"url":"https://github.com/yasargis/jelata-framework","last_synced_at":"2026-01-06T06:40:51.584Z","repository":{"id":227598932,"uuid":"177500010","full_name":"YaSargis/jelata-framework","owner":"YaSargis","description":"Jelata Framework","archived":false,"fork":false,"pushed_at":"2024-07-22T07:51:21.000Z","size":42253,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T21:18:00.497Z","etag":null,"topics":["database","framework","jelata-framework","plpgsql","postgresql","python","python3","reactjs","sql"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YaSargis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-25T02:27:02.000Z","updated_at":"2024-07-22T07:51:24.000Z","dependencies_parsed_at":"2025-02-12T09:39:55.648Z","dependency_job_id":"eba138ca-67f1-43ae-a9bf-c6c10383e403","html_url":"https://github.com/YaSargis/jelata-framework","commit_stats":null,"previous_names":["yasargis/jelata-framework"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSargis%2Fjelata-framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSargis%2Fjelata-framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSargis%2Fjelata-framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSargis%2Fjelata-framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YaSargis","download_url":"https://codeload.github.com/YaSargis/jelata-framework/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245735886,"owners_count":20663807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","framework","jelata-framework","plpgsql","postgresql","python","python3","reactjs","sql"],"created_at":"2024-09-24T13:49:55.154Z","updated_at":"2026-01-06T06:40:51.544Z","avatar_url":"https://github.com/YaSargis.png","language":"Python","readme":"# Current Version\nJelata Framework v. 0.0.6\n\n# Getting Started\nJelata Framework is a tool combining a framework and development environment that you can use in your browser. \nThe Jelata Framework is designed to simplify the development task with ready-made components that already have a bundle with data in the database.  \nTo start using you will need:  \n                        \u003cul\u003e\n\t\t\t\t\t\t\t\u003cli\u003epython 3 (recommended to use python versions older than 3.4)\u003c/li\u003e\n\t\t\t\t\t\t\t\u003cli\u003ePostgreSQL DBMS (PostgreSQL version 9.5 is recommended)\u003c/li\u003e\n\t\t\t\t\t\t\t\u003cli\u003enode js \u003c/li\u003e\n\t\t\t\t\t\t\u003c/ul\u003e\n\t\t\t\t\t\t\u003cp\u003eFor python, you must install the following libraries:\u003c/p\u003e\n                        \u003cul\u003e\n\t\t\t\t\t\t\t\u003cli\u003etornado v. 4.5.3\u003c/li\u003e\n\t\t\t\t\t\t\t\u003cli\u003emomoko\u003c/li\u003e\n\t\t\t\t\t\t\t\u003cli\u003exlsx2html\u003c/li\u003e\n\t\t\t\t\t\t\u003c/ul\u003e\n\t\t\t\t\t\t\n\u003cpre\u003epip install -Iv tornado==4.5.3 \npip install momoko\npip install xlsx2html\n\u003c/pre\u003e\n\n\u003cp\u003eFor start report service go to the path ./reports and install all modules and start node server (or use pm2 deamon).\u003c/p\u003e\n\u003cpre\u003enpm i\nnode index.js\n\u003c/pre\u003e\n\nNext, you need to create the project database by running the script from the framework.sql file (If you already have a database to which you want to connect, you need to create all the objects from the framework.sql script in your database).\nBase name can be renamed.\nThe last step is to check the settings for connecting to the database server in the settings.json file, if everything is correct, then start the server:\n\n\u003cpre\u003e\npython3 run_server.py\n\u003c/pre\u003e\nAfter starting the server, in the browser, go to http://127.0.0.1:8080 and in the user menu click on the login item\n\n\u003cp\u003e\u003cb\u003elogin:\u003c/b\u003e admin\u003c/p\u003e\n\u003cp\u003e\u003cb\u003epassword:\u003c/b\u003e 123\u003c/p\u003e\n\u003cp\u003ePS Be sure to change the administrator password before release.\u003c/p\u003e\n\u003cp\u003eFor see template components\tfollow the link  http://127.0.0.1:8080/list/test\u003c/p\u003e\n\n\nTemplates: \n\u003cul\u003e\n\t\u003cli\u003e\u003ca href=\"https://github.com/YaSargis/jelata-framework-ant-frontend\"\u003eand design\u003c/a\u003e\u003c/li\u003e\n\t\u003cli\u003e\u003ca href=\"https://github.com/YaSargis/jelata-framework-frontend-materialize\"\u003ematerialize\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\nYou can write your own front-end for framework \n\n## Authors\n\n* **Kazaryan Sargis**\n\n\n\u003ch2\u003e\u003cstrong class=\"ql-size-huge\"\u003eJelata Framework\u003c/strong\u003e\u003c/h2\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eTo get started make sure:\u003c/p\u003e\u003cul\u003e\u003cli\u003eall project files are in a folder called\u0026nbsp;\u003cstrong\u003ejelataframework\u003c/strong\u003e\u0026nbsp;.\u003c/li\u003e\u003cli\u003eall settings, including those for connecting to the database, are correctly specified in the\u0026nbsp;\u003cstrong\u003esettings.json\u003c/strong\u003e\u0026nbsp;file\u003c/li\u003e\u003cli\u003eyour database contains all data and objects from\u0026nbsp;\u003cstrong\u003eframework.sql\u003c/strong\u003e\u0026nbsp;file\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eTo start the server, type\u0026nbsp;\u003cstrong\u003e\u003cem\u003epython3 run_server.py\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;on Linux systems and\u0026nbsp;\u003cstrong\u003e\u003cem\u003epython run_server.py\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;on windows systems (if python is version 3).\u003c/p\u003e\u003cp\u003eTo start the print server, you need to have node js\u0026gt; 6 v, install all dependencies for the project in the reports folder, for this, type the command\u0026nbsp;\u003cstrong\u003e\u003cem\u003enpm i\u003c/em\u003e\u003c/strong\u003e\u003c/p\u003e\u003ch3\u003e\u003cbr\u003e\u003c/h3\u003e\u003ch3\u003e\u003cstrong class=\"ql-size-large\"\u003eMain Settings\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003eThe main project settings can be accessed through\u0026nbsp;\u003cspan style=\"color: rgb(255, 255, 255); background-color: rgb(0, 21, 41);\"\u003eProject Settings-\u0026gt; Global Project Settings -\u0026gt; Global Settings\u003c/span\u003e\u0026nbsp;or via the path / getone / mainsettings.\u0026nbsp;All settings are stored in the settings.json file and are duplicated in the database in the framework.mainsettings table.\u0026nbsp;Basic properties:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003edb connection string\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- DB\u003cem\u003e\u003cu\u003e\u0026nbsp;connection string\u003c/u\u003e\u003c/em\u003e\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eproject server port\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the port on which the web server is running\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003emain domain\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- project domain in production\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eprimary authorization\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- sign of authorization, whether the project requires mandatory authorization to work\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eredirect401\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- redirects to this path in case of 401 error status\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ehome page\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the main page of the project\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003elogin_url\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- login page\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ereports_url\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- report service server\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eischat\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- show the chat icon in the lower right corner\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etemplate\u003c/u\u003e\u0026nbsp;\u003c/em\u003e- project template (ant, materialize)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch3\u003e\u003cstrong class=\"ql-size-large\"\u003eViews\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003e\u003cem\u003e﻿\u003c/em\u003eView are\u003c/strong\u003e\u0026nbsp;the main components (configurations for rendering and data linking) used in the project.\u0026nbsp;They are located in the framework.views table and also in the auxiliary tables:\u0026nbsp;\u003cem\u003eframework.config (framework.defaultval, framework.select_condition, framework.visible_condition), framework.actions (framework.act_parametrs, framework.act_visible_condions), framework.filters.\u0026nbsp;\u003c/em\u003eThe data is\u0026nbsp;\u003cstrong\u003eheaped\u003c/strong\u003e\u0026nbsp;using the\u0026nbsp;\u003cstrong\u003eframework\u003c/strong\u003e\u0026nbsp;function\u0026nbsp;\u003cstrong\u003e. \"Fn_view_getByPath\" (_path varchar, _viewtype varchar, out outjson json)\u003c/strong\u003e\u0026nbsp;and processed using the\u0026nbsp;\u003cem\u003e/libs/admin.py\u003c/em\u003e\u0026nbsp;and\u0026nbsp;\u003cem\u003e/libs/sql_migration.py files\u003c/em\u003e\u0026nbsp;.\u003c/p\u003e\u003cp\u003eWe recommend creating and editing them from the admin panel, which is located in the menu item\u0026nbsp;\u003cspan style=\"color: rgb(255, 255, 255); background-color: rgb(0, 21, 41);\"\u003eProject Settings-\u0026gt; Components -\u0026gt; Views\u003c/span\u003e\u0026nbsp;, or along the path / list / views.\u003c/p\u003e\u003cp\u003eThe\u0026nbsp;\u003cem\u003e\u003cu\u003emain properties of a view\u003c/u\u003e\u003c/em\u003e\u0026nbsp;are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003etable\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- the main table,\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003epath\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- path,\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003etitle\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- title,\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003eroles\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- the roles of users with view rights (roles are in the\u003cem\u003e\u0026nbsp;framework.roles\u003c/em\u003e\u0026nbsp;table),\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003eclassname\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- the name of the CSS class that can be applied to the entire component,\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003eviewtype\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- component type (view)\u003cstrong\u003e\u0026nbsp;,\u003c/strong\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003esubscrible\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- opens a web-socket through which you can send messages and update the view (\u003cem\u003e\u0026nbsp;framework.viewsnotification\u003c/em\u003e\u0026nbsp;table).\u0026nbsp;And for table types (tiles, table)\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003epagination\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- turns on paging.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eUsing the\u0026nbsp;\u003cstrong\u003e\u003cem\u003eshowsql\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;button,\u0026nbsp;\u003cstrong\u003e\u003cem\u003eyou\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;can get the SQL script that turned out according to your config.\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eAt the moment there are 4 types of components in operation:\u003c/p\u003e\u003cul\u003e\u003cli\u003etable - table\u003c/li\u003e\u003cli\u003etiles - tiled list\u003c/li\u003e\u003cli\u003eform full - a form that instantly saves data (saves data after entering)\u003c/li\u003e\u003cli\u003eform not mutable - form without immediate saving\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eA link is attached to each type in the system, by which you can go to this view.\u003c/p\u003e\u003cp\u003eFor type\u0026nbsp;\u003cstrong\u003e\u003cem\u003etable\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;-\u0026nbsp;\u003cem\u003e/ list / \u0026lt;path\u0026gt;\u003c/em\u003e\u003c/p\u003e\u003cp\u003eДля\u0026nbsp;\u003cstrong\u003e\u003cem\u003eform full\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;и\u0026nbsp;\u003cstrong\u003e\u003cem\u003eform not mutable\u0026nbsp;\u003c/em\u003e\u003c/strong\u003e\u003cem\u003e- /getone/\u0026lt;path\u0026gt;\u003c/em\u003e\u003c/p\u003e\u003cp\u003eFor\u0026nbsp;\u003cstrong\u003e\u003cem\u003etiles\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;type\u0026nbsp;-\u0026nbsp;\u003cem\u003e/ tiles / \u0026lt;path\u0026gt;\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eA very important point is\u0026nbsp;\u003cstrong\u003epassing parameters\u003c/strong\u003e\u0026nbsp;in the address bar to the specified view, since\u0026nbsp;these parameters are filters for the view.\u003c/p\u003e\u003cp\u003eFor example, we have a view available on the path / list / myview with the field myfieldid, if we pass to the path / list / myview? Myfieldid = 13, then we will get records with myfieldid = 13, but myfieldid is not the name of the field in the table, and the \"title\" parameter in the config-e view (see the description for config).\u003c/p\u003e\u003cp\u003eFor views of type form full and form not mutable, it is necessary to pass a parameter narrowing the returned lines to 1, most often this is an explicit id indication, for example, / getone / myform? Id = 1\u003c/p\u003e\u003cp\u003eTo create a record in the form, you must specify a non-existent id, most often it is id = 0 (/ getone / myform? Id = 0).\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003cstrong\u003e\u003cem\u003erelation parameter:\u003c/em\u003e\u003c/strong\u003e\u003c/p\u003e\u003cp\u003ethe relation parameter is needed to pass the name of the table fields, in which you need to write values ​​to the table when creating a record, except for those explicitly passed, their values ​​must also be indicated in the address bar in the parameters with the table field name and value.\u003c/p\u003e\u003cp\u003eFor example, we add a record to the table mytable, which is specified as the main one in the view myview, of type form full, for this we went along the path\u0026nbsp;\u003cem\u003e\u003cu\u003e/ getone / myview? Id = 0,\u003c/u\u003e\u003c/em\u003e\u0026nbsp;and since\u0026nbsp;this is form full, then after the first change in the input, a request will be sent to save the data and a record will be created, but for example the table logically requires one more mandatory (not null) field - nnull_field, and in order to fill it in, we pass its name to the relation parameter -\u0026nbsp;\u003cem\u003erelation = nnull_field,\u003c/em\u003e\u0026nbsp;and the nnull_field parameter with the value\u0026nbsp;\u003cem\u003ennull_field = 1,\u003c/em\u003e\u0026nbsp;as a result, for a full-fledged work, we get the path\u0026nbsp;\u003cem\u003e\u003cu\u003e/ getone / myview? id = 0 \u0026amp; relation = nnull_field \u0026amp; nnull_field = 1\u003c/u\u003e\u003c/em\u003e\u0026nbsp;.\u003c/p\u003e\u003cp\u003eIf you need to pass several parameters, then we list them separated by commas, for example:\u0026nbsp;\u003cem\u003e\u003cu\u003e/ getone / myview? Id = 0 \u0026amp; relation = field1, field2 \u0026amp; field1 = 1 \u0026amp; field2 = teststring\u003c/u\u003e\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003cstrong\u003e\u003cem\u003euserid:\u003c/em\u003e\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eIf there is a\u0026nbsp;\u003cstrong\u003e\u003cem\u003euserid\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;field in the table\u0026nbsp;, then when the row is changed by standard means (form full and action of type Save and Delete), the current user will be written.\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eEach type of view component has its own settings -\u0026nbsp;\u003cstrong\u003econfig,\u003c/strong\u003e\u0026nbsp;depending on the type.\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch4\u003e\u003cstrong\u003e\u003cem\u003eDescription of config fields - a:\u003c/em\u003e\u003c/strong\u003e\u003c/h4\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ecolumn_order\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the order in which the field is displayed\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003efn\u003c/u\u003e\u003c/em\u003e\u0026nbsp;is a function, for the type of columnar function, this is also a field, the value of which is returned by the specified plpgsql function, it also depends on the fncolumns parameter - parameters passed to the function, for example SELECT id, fn1 (id) FROM mytable, where fn1 is the value fn.\u0026nbsp;It is most often used for simple functions, such as displaying a color, calculating something, or when foreign key relationships are not specified, which does not allow building further joins, or when there are ambiguous and complex relationships between tables in the database.\u0026nbsp;It can slow down the work, check the speed of the function.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003efncolumns\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- parameters passed to the function\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ecol\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the name of the field in the table\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etitle\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the name of the field in the component, you can also filter data by the value of this field using the incoming parameters in the address bar, for example / list / myview? field title = test title\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etype\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the type of the field, the behavior of the field, its display and connection with data depends on this, for a more detailed description of each type, read the column types below\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003evisible\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the sign of displaying the field, if true, then the user sees it on the component, if false, then the user does not see it, but the data is returned and can be manipulated\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003erequired\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- whether it is mandatory to specify a filter for this field, protects against user attempts to change the value of the specified filter and view all records, use as needed\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eorderby\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- sort by this field\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eorderbydesc\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- rotate sorting, only works if orderby is selected\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eupdatable\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- used for a view of type form full, updates the data after each save, also used to update the entire composition (read below)\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eclassname\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the application of css styles, the name of the css class\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eeditable\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- used for the table type - an editable cell in a table, makes it possible to change data inside a table cell\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ejoin\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- if there is a connection with another table, it applies JOIN instead of LEFT JOIN, the connection with another table is stipulated in the relation field and the presence of a foreign key in the table.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ewidth\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- width, you can use 100px, 70%, or markup from 1-24, 24 is the whole line, by default 12 is half\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eroles\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the roles that the field is available to\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003erelation\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the table with which the field is associated using a foreign key.\u0026nbsp;In the case of the types select_api, typehead_api, multiselect_api, multitypehead_api - the path to the API method (read more in the description of types), in the case of the types multiselect, multitypehead - the table where the values ​​will be taken from (for more details, read the description of the types).\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003erelationcolums\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- fields that can be pulled from the relation table (LEFT JOIN), are also used as fields for values ​​of types select, typehead, etc.\u0026nbsp;It is also possible to build joins based on links from expanded fields, the only condition is that the foreign key must be specified\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eselect_condition\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- conditions for fields of selct types, typehead for a list of values ​​from the table specified in relation\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003evisible_condition\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- field display conditions\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003edefaultval\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the value that the filter goes to the sql query condition, for example WHERE field1 = 1\u003c/li\u003e\u003c/ul\u003e\u003ch4\u003e\u003cbr\u003e\u003c/h4\u003e\u003ch4\u003e\u003cstrong\u003e\u003cem\u003eConfig-a field types:\u003c/em\u003e\u003c/strong\u003e\u003c/h4\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003elabel\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the type for displaying the value - html component label\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etext\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- html input of type text\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003enumber\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- html input c типом number\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ephone\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- html input with phone mask\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003epassword\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- html input of type password.\u0026nbsp;If this type is selected for a field, then the value written to the database is encrypted in md5.\u0026nbsp;No value is returned to the form, input will always be empty.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etextarea\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- html textarea component\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etexteditor\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- text editor, saves formatted text as html\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eautocomplete\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- autocomplete, searches for data across the entire table by the entered excerpt, returns the entered text and found data as a list (only form)\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ecertificate\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- selection of a certificate of existing digital signatures, it may not work, because\u0026nbsp;requires an extension in the browser and a script to work with the extension (only form)\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003echeckbox\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- for boolean types - html input of type checkbox\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ecodeEditor\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- code editor (ace editor based) (form only)\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ecolor\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- display color\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ecolorpicker\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- color\u003cem\u003e\u003cu\u003e\u0026nbsp;picker\u003c/u\u003e\u003c/em\u003e\u0026nbsp;, writes a hash code (only form)\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ecolorrow\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- colors the text of a row in a table in the specified color (table only)\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003edate\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- date picker\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003edatetime\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- date and time picker\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etime\u003c/u\u003e\u003c/em\u003e\u0026nbsp;-\u003cem\u003e\u003cu\u003e\u0026nbsp;time\u003c/u\u003e\u003c/em\u003e\u0026nbsp;selection\u003c/li\u003e\u003cli\u003e\u003cbr\u003e\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003efiles\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- same as file, only for multiple downloads\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003efilelist\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- only to show files uploaded using file or files\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eimage\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- loading an image type file\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eimages\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- same as images, only for bulk upload\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003egallery\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- only for displaying files uploaded using image or images\u003c/li\u003e\u003cli\u003einnerHtml - embeds html (it is dangerous to use without checking the incoming data for inline scripts)\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003elink\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- a link, can display just a link, for example http://github.com, if you return it in text.\u0026nbsp;Or you can return a json object of type {title: 'mylink', link: 'mypath', target: '_ blank'}\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003emultidate\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- multiple date selection, saves to array [\"2018-01-01\", \"2018-01-02\"] (form only)\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eselect\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- html component select - drop-down list, used only if the relation field contains a table from a foreign key field, and the relationcolums specifies fields that will serve as values ​​for the list, if one field is selected, then it will be recorded and displayed if selected two fields, for example [\"id\", \"title\"], then id will be written as a value to the base, and title will be displayed for selection, if 3 or more fields are selected, then the first will be written, and all the rest will be concatenated for display.\u0026nbsp;You can also apply a condition for displaying a list by specifying it in select_condition.\u0026nbsp;It is important that the select type gives only 300 records from the table, if there are more records, we recommend using the typehead type.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etypehead\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- html component select - with search, works on the same principle as the select type, but requires a search string that the user enters, the search is performed over the entire table specified in the relation, according to the fields specified in relationcolums.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003emultiselect\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- works on the principle of the select type, but does not require a foreign key, the table can be specified independently in the admin panel of the config.\u0026nbsp;Multiple choice.\u0026nbsp;Saves an array of selected values ​​to the JSON database, for example [15,155,14], so the field in the table must be of json type.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003emultitypehead\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- works on the principle of the multiselect type, only with search\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eselect_api\u003c/u\u003e\u003c/em\u003e- works on the principle of the select type, but instead of a table link, the relation specifies the path to the API method (for example / api / gettables), which returns data for the list.\u0026nbsp;The API method must be POST, must return an object with the outjson key containing an array of objects like {label: \"val1\", value: \"1\"}, where value is written to the database, and label is to be displayed to the user.\u0026nbsp;Those.\u0026nbsp;the method response should look like this: {outjson: [{label: \"val1\", value: \"1\"}, {\"label\": \"val2\", value: \"2\"}, ...]}.\u0026nbsp;The body of the method will contain the object {config: [...], data: {...}, inputs: {...}}, where config is the config view, data is all the current data on the form, inputs are these are the current address bar parameters and can be used to manipulate data in your API method.\u0026nbsp;Important,\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etypehead_api\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the same as the select type, but additionally the parameter goes subtr - the search query\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003emultiselect_api\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- works on the principles of multiselect and select_api, multiple choice, receives data from the API method, saves an array of selected data to a database table.\u0026nbsp;It also accepts a parameter val - in which the current value, return a list by val, to initialize the form with a filled value.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003emultitypehead_api\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- works on the principles of multitypehead and typehead_api, multiple selection, receives data from the method API, sends the substr parameter for search, saves an array of selected data to a database table.\u0026nbsp;It also accepts a parameter val - in which the current value, return a list by val, to initialize the form with a filled value.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003erate\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- asterisks for ratings, we recommend using with the numeric type, because\u0026nbsp;ratings can be 4.5, 2.5, etc.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etags\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- tags, saves an array of entered lines, adds to the array on onEnter, stores in the database in a json field\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003earray\u003c/u\u003e\u003c/em\u003e\u0026nbsp;is a table that has a one-to-many relationship with the main one, you can display it as a table, but with the names of the fields, as indicated in the database.\u0026nbsp;Not recommended for use unless urgently needed.\u0026nbsp;Configurable in relationcolums.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003ediagram\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- выводит диаграмму в виде графика, Формат данных {\"datasets\" : [{\"label\" : \"MyDiagram\", \"x\" : [\"1\",\"2\",\"3\",\"4\",\"5\"], \"color\" : \"green\"}], \"y\" : [\"1\",\"2\",\"3\",\"4\",\"5\"]}\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch4\u003e\u003cstrong\u003eFilters:\u003c/strong\u003e\u003c/h4\u003e\u003cp\u003eFor the types of views - table and tiles, it is possible to add filters.\u003c/p\u003e\u003cp\u003eFilters have several basic properties.\u003c/p\u003e\u003cul\u003e\u003cli\u003etitle is the title to display the filter,\u003c/li\u003e\u003cli\u003ecol or columns - fields by which to filter data,\u003c/li\u003e\u003cli\u003etype - type,\u003c/li\u003e\u003cli\u003eposition - location,\u003c/li\u003e\u003cli\u003eorder - order.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFilters are distinguished in two categories, the first - is the location on the page -\u0026nbsp;\u003cstrong\u003e\u003cem\u003e\u003cu\u003eposition\u003c/u\u003e\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;, the second - this type of filter.\u003c/p\u003e\u003cp\u003eAt the moment, two options are available by location, these are\u0026nbsp;\u003cem\u003eUp\u003c/em\u003e\u0026nbsp;- on top of the form and\u0026nbsp;\u003cem\u003eRight\u003c/em\u003e\u0026nbsp;- on the right, in the drop-down window.\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eBy types:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eperiod\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- specified for a field of type date, filters data by two specified dates of the period, mydatefield\u0026gt; = filterdate1 and mydatefield \u0026lt;= filterdate2\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003edate_between\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- specified for a field of type date, filters data according to the principle mydatefield\u0026gt; = filterdate and mydatefield \u0026lt;= filterdate\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003echeck\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- used for a field with boolean data type, checkbox - with values ​​true / false / null\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003esubstr\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- search for a substring in a string.\u0026nbsp;(lower (myfield) like lower (concat ('%', _ substr, '%')))\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003etypehead\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- search in several fields, you can also search by specifying the search values ​​separated by a space, in the case when 3 or more fields are specified.\u0026nbsp;Good for searching by last name, first name, but may not work for a single field that contains values ​​with problems.\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003eselect\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- select a filter value from the drop-down list, for fields with a foreign key, for the filter to work, the field must have a table in the relation and two fields in relationcolums must be specified - the value and the field to display, for example [\"id\", \"title\" ]\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003emultiselect\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- the same as select, only multiple choice, i.e.\u0026nbsp;the filter will not be t1.myselectfield = val, but t1.myselectfield in (select value from json_array_elements (val))\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u003cu\u003emultijson\u003c/u\u003e\u003c/em\u003e\u0026nbsp;- intersection of two arrays, one is the field value, the second is the selected array in the filter\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch4\u003e\u003cstrong\u003eActions:\u003c/strong\u003e\u003c/h4\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eThe main functionality for managing a view is action.\u0026nbsp;Framework.actions tables.\u0026nbsp;Basic properties:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003etitle\u003c/em\u003e\u0026nbsp;- the name of the button, or action\u003c/li\u003e\u003cli\u003e\u003cem\u003etype\u003c/em\u003e\u0026nbsp;- type of action (see types of actions)\u003c/li\u003e\u003cli\u003e\u003cem\u003eisforevery\u003c/em\u003e\u0026nbsp;- for each row, used for table and tiles\u003c/li\u003e\u003cli\u003e\u003cem\u003eismain\u003c/em\u003e\u0026nbsp;- fires on double click on a row, used for table and tiles\u003c/li\u003e\u003cli\u003e\u003cem\u003eact\u003c/em\u003e\u0026nbsp;- path\u003c/li\u003e\u003cli\u003e\u003cem\u003eclassname\u003c/em\u003e\u0026nbsp;- CSS class\u003c/li\u003e\u003cli\u003e\u003cem\u003eicon\u003c/em\u003e\u0026nbsp;- icon, antd icon v3. * https://3x.ant.design/components/icon/\u003c/li\u003e\u003cli\u003e\u003cem\u003eactapitype\u003c/em\u003e\u0026nbsp;- the type of the API method, in case the type is API, GET, POST, PUT, DELETE\u003c/li\u003e\u003cli\u003e\u003cem\u003eactapirefresh\u003c/em\u003e\u0026nbsp;- update the form after performing an action of the API type\u003c/li\u003e\u003cli\u003e\u003cem\u003eparametrs\u003c/em\u003e\u0026nbsp;- parameters, read more description of parameters\u003c/li\u003e\u003cli\u003e\u003cem\u003eact_visible_condition\u003c/em\u003e\u0026nbsp;- visibility conditions\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eAction types:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003eLink\u003c/em\u003e\u0026nbsp;- follow the link (without reloading the page)\u003c/li\u003e\u003cli\u003e\u003cem\u003eLinkTo\u003c/em\u003e\u0026nbsp;- opens in a new page\u003c/li\u003e\u003cli\u003e\u003cem\u003eAPI\u003c/em\u003e\u0026nbsp;- calling the API of the method, if the method returns message - it will be shown as a notification, if _redirect - it will redirect to the specified path\u003c/li\u003e\u003cli\u003e\u003cem\u003eDelete\u003c/em\u003e\u0026nbsp;- delete a record, it is used only in views such as tables and tiles, isforevery must be true, i.e.\u0026nbsp;fires only for a row in a table\u003c/li\u003e\u003cli\u003e\u003cem\u003eSave\u003c/em\u003e\u0026nbsp;- saving data in the form form not mutable\u003c/li\u003e\u003cli\u003e\u003cem\u003eSave \u0026amp; Redirect\u003c/em\u003e\u0026nbsp;- saving data in the form not mutable and redirecting to the path specified in act\u003c/li\u003e\u003cli\u003e\u003cem\u003eOnLoad\u003c/em\u003e\u0026nbsp;is an API method that is executed before the component is loaded, so you can, for example, download or update data before loading\u003c/li\u003e\u003cli\u003e\u003cem\u003eExpand\u003c/em\u003e\u0026nbsp;- an expanding component of a table row, is used only in a view of the table type - in act, the path to the getone or list component is indicated, for example / list / myview or / getone / myview, parameters are also passed to parametrs\u003c/li\u003e\u003cli\u003e\u003cem\u003eModal\u003c/em\u003e\u0026nbsp;- a modal window, opens the view specified in the act in the modal window, passing parameters, after closing the window, updates the view, the path to the component must be getone or list, for example / list / myview or / getone / myview, parameters are also passed to parameters\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eDescription of parameters:\u003c/p\u003e\u003cp\u003eParameters in actions have several basic properties and rules.\u0026nbsp;title is the name of the parameter, then you should choose where to get the value for the parameter, it is possible to take from the component data - val_desc, specify a constant - const, or take it from the address bar - input.\u0026nbsp;If\u0026nbsp;\u003cem\u003eisforevery\u003c/em\u003e\u0026nbsp;false is used in table or tiles, and val_desc is specified, then the value will be taken from the first record of the table, but it may not appear, so be careful using a similar construction.\u0026nbsp;For the onLoad action type, only the Input value can be used.\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eService parameters:\u003c/p\u003e\u003cp\u003e_sub_title - If you pass the _sub_title parameter, then in the view, in addition to the main title, there will be a subtitle with the parameter value:\u003c/p\u003e\u003cp\u003e?id=1\u0026amp;_sub_title=My SubTitle\u003c/p\u003e\u003cp\u003erelation - The relation parameter is described above\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eGlobal parameters:\u003c/p\u003e\u003cp\u003e_checked_ - if you pass the constant _checked_ in the parameter value, you can pass an array of identifiers selected in the table, for this checker: true must be specified in the main view properties, only for the table type\u003c/p\u003e\u003cp\u003e_userid_ - if you pass the constant _userid_ in the parameter value, then you can pass the identifier of the current user, it can also be passed to config in defaulval, select_condition\u003c/p\u003e\u003cp\u003e_orgid_ - if you pass the constant _orgid_ in the parameter value, then you can pass the identifier of the current organization, the current user, it can also be passed to config in defaulval, select_condition\u003c/p\u003e\u003cp\u003e_orgs_ - if you pass the constant _orgs_ in the parameter value, then you can pass the JSON array identifiers of all organizations, the current user, they can also be passed to config in defaulval, select_condition\u003c/p\u003e\u003cp\u003e_sesid_ - session identifier\u003c/p\u003e\u003cp\u003e_viewid_ - view id from\u0026nbsp;\u003cem\u003eframework.views\u003c/em\u003e\u0026nbsp;table\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch3\u003e\u003cstrong class=\"ql-size-large\"\u003eComposition\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eCompositions is a component in which you can combine several views into one, available at the path / composition / \u0026lt;mycompopath\u0026gt;.\u003c/p\u003e\u003cp\u003eComposition properties:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003etitle\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- title of the composition - title,\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003epath\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- the path of the composition along this path the component will be available,\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003eviscond_function\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;is a function that returns a json array of view identifiers that need to be displayed, takes as input all the address bar parameters - inputs and path of the composition, an example of the\u003cspan style=\"color: rgb(196, 26, 22);\"\u003e\u0026nbsp;framework.fn_views_compo_visible\u003c/span\u003e\u0026nbsp;function.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003econfig - a\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;list of views to display.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eConfig, in turn, contains view display properties,\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003erownum\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- the order\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003ewidth\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- width from 1 to 24, by default it is always 24 - full screen.\u0026nbsp;those.\u0026nbsp;100%,\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e\u003cem\u003epath\u003c/em\u003e\u003c/strong\u003e\u0026nbsp;- object containing id, path, viewtype - view identifier, path and view type.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eThe parameters are passed the same as they should come to the view.\u0026nbsp;those.\u0026nbsp;if you combined in view table and getone of the same table and sent id = 0, then it will apply to both views.\u003c/p\u003e\u003cp\u003eCompositions update data if there is at least one updatable in the view in the config (in the config).\u003c/p\u003e\u003cp\u003eThe database is stored in the framework.compos table.\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch3\u003e\u003cstrong class=\"ql-size-large\"\u003eTrees\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003eTree is a tree-like menu where you can specify items and a view or composition corresponding to an item, you can also specify parent records, for each item you need to specify a name and an icon.\u0026nbsp;Trees are available along the path / trees / \u0026lt;mytreepath\u0026gt;, where \u0026lt;mytreepath\u0026gt; is the path of the tree.\u0026nbsp;It is also possible to specify the main item that will open when the tree is initialized.\u0026nbsp;You can get to the desired tree item by specifying # \u0026lt;item identifier\u0026gt; in the address bar, for example: / trees / \u0026lt;mytreepath\u0026gt;? Oid = 12 # 15, where # 15 is the item identifier.\u0026nbsp;The parameters in the tree, as well as in the composition, are passed through to the view.\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch3\u003e\u003cstrong class=\"ql-size-large\"\u003eSPAPI\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003eSpApi are API methods that are stored in the framework.spapi table and are executed on the principle of direct execution of the specified function, i.e.\u0026nbsp;each method has its own pl / pgsql function.\u0026nbsp;The function must have an input injson parameter of the JSON type, into which the body and request parameters will be passed.\u0026nbsp;The function can return any data type, the message and _redirect return service parameters are described in the API action type.\u0026nbsp;API methods have the following properties:\u003c/p\u003e\u003cul\u003e\u003cli\u003emethod name - the name of the API method, the method is available at the path / api / \u0026lt;method name\u0026gt;\u003c/li\u003e\u003cli\u003efunction - plpgsql function\u003c/li\u003e\u003cli\u003emethotype - API type of the method, get, post, put, delete\u003c/li\u003e\u003cli\u003eroles - user roles for which the method is available, if nothing is selected, the method will be available to everyone, even to unauthorized users\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe method is available at the path / api / \u0026lt;mymethodname\u0026gt;\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch3\u003e\u003cstrong class=\"ql-size-large\"\u003eMenu\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003eThe table - framework.menus - stores data about the menus that are added to the project and their location, i.e.\u0026nbsp;Left Menu - left menu, Header Menu - top menu, etc. The table - framework.mainmenu - stores the menu list.\u0026nbsp;In order to add / edit a menu, go to the menu item\u0026nbsp;\u003cspan style=\"color: rgb(255, 255, 255); background-color: rgb(0, 21, 41);\"\u003eProject Settings -\u0026gt; Auxiliary settings -\u0026gt; Menu Settings\u003c/span\u003e\u0026nbsp;.\u003c/p\u003e\u003cp\u003eProperties:\u003c/p\u003e\u003cul\u003e\u003cli\u003etitle - the title of the menu item\u003c/li\u003e\u003cli\u003eparent - parent record\u003c/li\u003e\u003cli\u003eroles - the roles for which the menu item is available\u003c/li\u003e\u003cli\u003eorder by - the order of the item\u003c/li\u003e\u003cli\u003epath - path\u003c/li\u003e\u003cli\u003eicon - item icon https://3x.ant.design/components/icon/\u003c/li\u003e\u003cli\u003eno session - show menu item only if user is not logged in\u003c/li\u003e\u003cli\u003ews messagetype - specify the type of notification from the framework.notification table, add a counter\u003c/li\u003e\u003cli\u003eis title - whether to show the title of the item\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch3\u003e\u003cstrong class=\"ql-size-large\"\u003eNotifications\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003eSending notifications to a project is possible by adding records to the framework.notification table.\u0026nbsp;Basic properties:\u003c/p\u003e\u003cul\u003e\u003cli\u003emessage - message\u003c/li\u003e\u003cli\u003emessagetype - notification type, specified in the menu, for the 'notifs' counter by default\u003c/li\u003e\u003cli\u003efor_userid - identifier of the user for whom the notification\u003c/li\u003e\u003cli\u003esended_sessions - sessions received notifications\u003c/li\u003e\u003cli\u003eisread - read\u003c/li\u003e\u003cli\u003esessid - session for which notification, if for_userid is not specified\u003c/li\u003e\u003c/ul\u003e\u003ch3\u003e\u003cbr\u003e\u003c/h3\u003e\u003ch3\u003e\u003cstrong class=\"ql-size-large\"\u003eUser CSS\u003c/strong\u003e\u003c/h3\u003e\u003cp\u003euser.css is a file connected to the project's index.html.\u0026nbsp;You can write new CSS classes in this file by going to the menu item\u0026nbsp;\u003cspan style=\"color: rgb(255, 255, 255); background-color: rgb(0, 21, 41);\"\u003eProject Settings -\u0026gt; Global Project Settings -\u0026gt; User Css\u003c/span\u003e\u0026nbsp;.\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003cstrong class=\"ql-size-large\"\u003eUpdates\u003c/strong\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eAdded functions for transferring views from one database to another\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cspan style=\"color: rgb(0, 102, 204);\"\u003eframework. \"fn_view_genJson\"\u003c/span\u003e\u0026nbsp;- getting JSON view for transfer\u003c/p\u003e\u003cp\u003e\u003cspan style=\"color: rgb(240, 102, 102);\"\u003eframework.\"fn_view_fromJson\"\u003c/span\u003e\u0026nbsp;- добавление view из JSON\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eChanging the interface language\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eTo change the interface language, in the jelataframework / files folder in the languages.js file, change the value of the LnG variable, RU and ENG are available, if necessary, you can add a translation to json LaNg by adding your language code to each array object, as a key and a translation, in as a value, for example: \"List\": {\u003c/p\u003e\u003cp\u003e\"EN\":\"list:\",\u003c/p\u003e\u003cp\u003e\"RU\":\"Список:\",\u003c/p\u003e\u003cp\u003e\u003cspan style=\"background-color: rgb(255, 255, 0); color: rgb(230, 0, 0);\"\u003e\"CN\": \"List\"\u003c/span\u003e\u003c/p\u003e\u003cp\u003e}\u003c/p\u003e\u003cp\u003e\u003cbr\u003e\u003c/p\u003e\u003ch1\u003e\u003cstrong\u003ePresentation\u003c/strong\u003e\u003c/h1\u003e\u003cul\u003e\u003cli\u003e\u003cstrong style=\"color: rgb(102, 185, 102);\"\u003e \u003c/strong\u003e\u003ca href=\"https://github.com/YaSargis/jelata-framework/blob/master/files/create_table.gif\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"color: rgb(102, 185, 102);\"\u003e\u003cstrong\u003ecreate table\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong style=\"color: rgb(102, 163, 224);\"\u003e \u003c/strong\u003e\u003ca href=\"https://github.com/YaSargis/jelata-framework/blob/master/files/create_list_view.gif\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"color: rgb(102, 163, 224);\"\u003e\u003cstrong\u003ecreate list view\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/YaSargis/jelata-framework/blob/master/files/create_form_view.gif\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"color: rgb(240, 102, 102);\"\u003e\u003cstrong\u003ecreate form view\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style=\"color: rgb(102, 185, 102);\"\u003e \u003c/span\u003e\u003ca href=\"https://github.com/YaSargis/jelata-framework/blob/master/files/edit_and_delete.gif\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"color: rgb(102, 185, 102);\"\u003e\u003cstrong\u003eedit and delete\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/YaSargis/jelata-framework/blob/master/files/menu.gif\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"color: rgb(194, 133, 255);\"\u003e\u003cstrong\u003emenu\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyasargis%2Fjelata-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyasargis%2Fjelata-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyasargis%2Fjelata-framework/lists"}