How to add metadata details and description in Opencart? - opencart

Can anyone help me in adding meta data details to manufactures in opencart? I am looking for adding meta data keyword, description and manufacturer description similar to products or categories.

Open your opencart database and add the following extra field to oc_manufacturer table
ALTER TABLE oc_manufacturer ADD COLUMN `description` text NOT NULL;
ALTER TABLE oc_manufacturer ADD COLUMN `meta_title` varchar(255) NOT NULL;
ALTER TABLE oc_manufacturer ADD COLUMN `meta_description` varchar(255) NOT NULL;
ALTER TABLE oc_manufacturer ADD COLUMN `meta_keyword` varchar(255) NOT NULL;
Edit manufacturer controller file and below code
Edit file: catalog/controller/product/manufacturer.php
Find code:
$this->document->setTitle($manufacturer_info['name']);
Replace below code with that:
$this->document->setTitle($manufacturer_info['meta_title']);
$this->document->setDescription($manufacturer_info['meta_description']);
$this->document->setKeywords($manufacturer_info['meta_keyword']);
$data['description'] = $manufacturer_info['description'];
Now edit view file of manufacturer products
Edit file: catalog/view/theme/[ACTIVE THEME]/template/product/manufacturer_info.twig
And add description variable where you want to place the manufacturer description
{{ description }}
Note: Refresh modification by click on the refresh button in Extension -> modification page in admin panel
Now add your description and metadata into oc_manufacturer table

Related

Oracle Apex error ORA-01776: cannot modify more than one base table through a join view

I have an app in Oracle Apex 22.21. There are multiple tables (ORDERS, ORDER_ITEMS, STORES, and PRODUCTS).
ORDERS table
enter image description here
I have a Master Detail report that is editable. The main report shows the ORDERS table and the detail shows the ORDER_ITEMS table.
Report image
enter image description here
In the ORDERS table, there is a column STORE_ID which is a foreign key to the STORES table. The STORES table has a column STORE_NAME. I am able to edit the report (change the STORE_ID to another 'id' ex: 1,2,3) when the table's Source is set to the ORDERS table.
STORES table
enter image description here
STORES table data
enter image description here
I want the ORDERS table to include the STORE_NAME column referring to the STORES table. As it does not make sense for the user to enter a STORE_ID to edit a row. I want the user to be able to edit the STORE_ID by entering the STORE_NAME or by choosing an LOV. I changed the report Source Type to SQL Query and ran the below code.
select
ORDERS_LOCAL.*,
STORES.STORE_NAME
from ORDERS_LOCAL
inner join STORES
ON ORDERS_LOCAL.STORE_ID=STORES.STORE_ID
However, when I try to edit a cell, I encounter an error ORA-01776: cannot modify more than one base table through a join view
I've found a post/solution regarding this error and tried to follow the instructions. The first solution does not work in my case because I actually want the user to be able to edit the STORE_ID column by showing STORE_NAME.
enter image description here
I've tried changing and running the PL/SQL code exactly as instructed but nothing saves when I change a cell value and click save. But I don't receive any error.
BEGIN
CASE :apex$row_status
WHEN 'C'
THEN
INSERT INTO stores (store_id, store_name)
VALUES ( :p10_store_id, :p10_store_name);
INSERT INTO orders_local (order_id,
order_number,
order_date,
store_id,
full_name,
email,
city,
state,
zip_code,
credit_card,
order_items
)
VALUES ( :p10_order_id,
:p10_order_number,
:p10_order_date,
:p10_store_id,
:p10_full_name,
:p10_email,
:p10_city,
:p10_state,
:p10_zip_code,
:p10_credit_card,
:p10_order_items);
WHEN 'U'
THEN
UPDATE orders_local
SET order_id = :p10_order_id,
order_number = :p10_order_number,
order_date = :p10_order_date,
store_id = :p10_store_id,
full_name = :p10_full_name,
email = :p10_email,
city= :p10_city,
state= :p10_state,
zip_code= :p10_zip_code,
credit_card= :p10_credit_card,
order_items= :p10_order_items
WHERE order_id = :p10_order_id;
UPDATE stores
SET store_name = :p10_store_name
WHERE store_id = :p10_store_id;
WHEN 'D'
THEN
DELETE orders_local
WHERE order_id = :p10_order_id;
DELETE stores
WHERE store_id = :p10_store_id;
END CASE;
END;
Take a step back. The "report that is editable" is an interactive grid. If the report is display only, then you can use any SQL to display data. However, if it is editable then the SQL statement is used to update the rows as well. The statement
select
ORDERS_LOCAL.*,
STORES.STORE_NAME
from ORDERS_LOCAL
inner join STORES
ON ORDERS_LOCAL.STORE_ID=STORES.STORE_ID
Cannot be used to update the store_id in the orders_local table. Currently you're trying to work around this by using custom code for the update but that is overcomplicating things. So, take a step back and restart.
The query for the interactive grid should be
select
*
from ORDERS_LOCAL
Define a List of Values to display the select list for Stores. The query for that list of values is
select
store_id as return_value,
store_name as display_value
from stores
In the interactive grid us this list of values for the store_id column.
That is all there is to it. This will allow you to use the native process for handling the IG updates.

How to display and update the records I have added/insert in the Apex interactive report

I've created an interactive report to add/update/delete employee info records in custom db table.
My end user requirement is upon entering the employee number in the EMPNO field, all the details from the oracle standard table such as employee name, marital status, gender, bday must be auto generated in the form and they will only manually input the location name and mode of exit.
Now I created 3 pages: 1.home page, 2.add page, 3.update page
On page 1 (home page)
I have here the select SQL
with checkbox
On page 2 (add page),
In the page processing portion
I have
EventAddRecord
Source: db , plsql code
Here's my sample code:
BEGIN
INSERT INTO EMPINFOTBL
(PERSON_ID,
EMPLOYEE_NUM,
EMPLOYEE_NAME,
MARITAL_STATUS,
BDATE,
GENDER,
LOCATION_NAME,
MODE_OF_EXIT
)
VALUES
(SELECT PERSON_ID FROM
PER_PEOPLE_X WHERE EMPLOYEE_NUM = :P2_EMPLOYEE_NUM),
(SELECT EMPLOYEE_NUMBER ID FROM
PER_PEOPLE_X WHERE EMPLOYEE_NUM = :P2_EMPLOYEE_NUM),
(SELECT FULL_NAME FROM
PER_PEOPLE WHERE EMPLOYEE_NUM = :P2_EMPLOYEE_NUM),
(SELECT MARITAL_STATUS FROM
PER_PEOPLE WHERE EMPLOYEE_NUM = :P2_EMPLOYEE_NUM),
(SELECT DATE_OF_BIRTH FROM
PER_PEOPLE WHERE EMPLOYEE_NUM = :P2_EMPLOYEE_NUM),
(SELECT GENDER FROM
PER_PEOPLE WHERE EMPLOYEE_NUM = :P2_EMPLOYEE_NUM),
:P2_LOCATION_NAME,
:P2_MODE_OF_EXIT
);
END;
Buttons
SAVE with dynamic action
When click add button if True submit page
Now my problem is how to do the update when I click the check box,
I want my record to be displayed in the form because currently when I click the check box the form is null
To create a new record (using Page 2), you'd create a select list item which is based on per_people table; you'd display any information you want, but you'd return employee ID:
select full_name as display_value,
employee_num as return value
from per_people
order by full_name;
After selecting desired person, enter values into P2_LOCATION_NAME and P2_MODE_OF_EXIT items. When you hit the "Save" button (which submits the page), run the process (I modified what you wrote; should be way simpler):
INSERT INTO empinfotbl (person_id,
employee_num,
employee_name,
marital_status,
bdate,
gender,
location_name,
mode_of_exit)
SELECT person_id,
employee_number,
full_name,
marital_status,
date_of_birth,
gender,
:P2_LOCATION_NAME,
:P2_MODE_OF_EXIT
FROM per_people
WHERE employee_num = :P2_EMPLOYEE_NUM;
As of updating existing values: I'd again suggest you to use the Wizard as it creates everything you need - form page is based on empinfotbl table, while "Edit" button in Interactive report sends the ID value to form page whose pre-rendering process fetches data related to employee identified by passed ID.
If you created your own page, you'll have to do it all yourself.
You said:
I want my record to be displayed in the form because currently when I click the check box the form is null
Form items are empty because Apex didn't know what to fetch. As I said: pass ID value, create pre-rendering process. Or start over with the Wizard (I prefer that option).
#Littlefoot has given a perfect answer already, here are just some extra steps that might guide you to a solution (it's the "or start over with the wizzard" piece from Littlefoot's answer). I'd suggest looking how apex generates its pages when you do it out of the box. Just for testing, follow these steps
Create a new page of type "Interactive Report" and make sure to check the "Include Form Page" attribute
Give the form page a name and select "PER_PEOPLE" as table/view name
In the 2nd page of the dialog, select the primary key column of PER_PEOPLE: person_id
Click "Create Page"
You now have a working form and report that you can further customize to your specific requirements. It should give you a good idea of how a form and a report is generally configured in APEX and it saves you a ton of time
Notices how in the report page:
The edit link has the form page as target and passes the id
The CREATE button has the form page as target without the id
In the form page
No custom code is needed to initialize the form data for the current record. Instead the native process of type "Form - Initialization" is used.
No dynamic actions are used to perform the inserts - for a form that is a bad practice. Avoid it.
No custom code is needed to perform the inserts or update. Instead the native process of type "Form - Automatic Row Processing" is used.
Study these pages and apply similar logic to your own pages. It'll be a better app.

How to upload file as blob to my table | Oracle Apex |

I have been trying since yesterday no where I am able to find a proper post how to upload file as blob to table.
Below is my table :
create table upload_file
(
fileblob blob,
filename varchar2(250),
mimetype varchar2(250),
createDate date
);
I have created a page name as Testing and Added below items
P1_CHOOSE_FILE [ file browse ]
P1_MIMETYPE [ Hidden ]
FILE_NAME [ Hidden ]
CREATED [ Hidden ]
On P1_CHOOSE_FILE , I set a property called : Blob column specified in Item source attribute
and value required as ON
Then created one Button with Dynamic action
Now my biggest challenge is How to insert my choose file to my upload_file table using PL/SQL code
I tried report with form but it does not work for me in APEX 20.x due to restrictions setting done to it. So want to achieve using PL/SQL code.
Please demonstrate with image and code and how to achieve it
Not sure if it will help you, but here's how I did on my application :
My table :
CREATE TABLE inv_tb_document(
pk_document INT, --primary key
nom_document VARCHAR(255) CONSTRAINT ct_nn_nom_document NOT NULL, --document name
blob_document BLOB CONSTRAINT ct_nn_blob_document NOT NULL, --blob column
mimetype_document VARCHAR(255) CONSTRAINT ct_nn_mimetype_document NOT NULL, --mimetype column
charset_document VARCHAR(255), --charset column
commentaire_document VARCHAR(75) CONSTRAINT ct_nn_commentaire_document NOT NULL, -- irrelevant for your case
date_document TIMESTAMP(8) CONSTRAINT ct_nn_date_doducment NOT NULL, --irrelevant too
CONSTRAINT ct_pk_document PRIMARY KEY(pk_document)
);
Now, here's what I did for my form :
Here are the attributes of my File Browser Item :
I don't have any custom code to insert the document on my tables, I hope this could help you anyway.
not an exact answer to your specific question, but if you change Storage Type as Table APEX_xx_Temp. you could go like this:
(select filename from apex_application_temp_files where name = :P1_CHOOSE_FILE)
,(select mime_type from apex_application_temp_files where name = :P1_CHOOSE_FILE)
,(select blob_content from apex_application_temp_files where name = :P1_CHOOSE_FILE)

how to get an item "Database column" name

Oracle Apex 19.1.0.00.15.
how to get an item "Database column" name for IG or Form region like that exists in Oracle Forms
get_item_property('block.item',COLUMN_NAME);
I don't know of an existing function to do this, but you can obtain it like this for a form item:
select item_source
into v_column_name
from apex_application_page_items
where application_id = :APP_ID
and item_name = v_item_name;
You could wrap that in a function of your own.
There is another APEX view APEX_APPL_PAGE_IG_COLUMNS for IG columns, but I can't see how you would need that as to look up the column name you are going to need to know the column name, right?!

Formatting a portal in FileMaker 13 to show related text only and not keys

I am using FileMaker Pro 13. I need to add Portal to show data from related table.
Some fields which I wanna add to Portal are "Foreign keys" from that related table that are linked-related to third table.
Results I am getting in Portal from those fields are numbers, but I need data (text) from that third table that is related to that "Foreign key".
Is it possible to create portal that shows text related to that foreign key, and if it is, how to achieve that?
Thanks a lot!
Example schema is on link https://www.lucidchart.com/invitations/accept/e45dfdfd-185d-46c8-ad9e-e8e8dc270ee7
In general words, I want to add Portal on layout based on Table3, so I can view related data from Table2, and it would have fields tbl2item, TBL1_foreign key (from where I pull data from Table 1 when I enter data in Table 2, using pop up menu). And in Portal data I need TBL1_foreign key to be represented as text from related table instead of auto-numbers.
Assuming the relationship:
Table 1 --> Table 2 --> Table 3
You are in the layout based on Table 1. Make sure there is relationship to Table 3 and it is in the same group (TOG) in Manage Databases. Just place the field with text from the Table 3 on your portal row and it should work.
Make sure you select the correct relationship for Table 3. In drop-down list it should be in "Related" group. Should look like "Table 3::myFiled" on the layout, with the name the same as the name of your table instance (TO) from "Manage database" which could be different from your base table name
The other option would be to use value list.
I do not see your file, so if it does not work for you, post more details about your setup.